목록Study/Algorithm (400)
hwooo
https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net 풀이 해당 범위 내의 값이 모두 같다면 종이의 개수 증가 범위 내에서 다른 값이 나온다면 범위를 N/3 하여 다시 재귀함수를 돌림 코드 #include int A[2200][2200]; int n0 = 0, n1 = 0, n_1 = 0; void D(int a, int b, int N) { int i, j, num; num = A[a][b]; for (i = a; i < a + N; i..
https://www.acmicpc.net/problem/24418 24418번: 알고리즘 수업 - 행렬 경로 문제 1 오늘도 서준이는 동적 프로그래밍 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 양의 정수로 이루어진 n × n 행렬 m이 주어진다. 행렬의 www.acmicpc.net 코드 #include int cnt1 = 0, cnt2 = 0; int max(int a, int b) { if (a > b) return a; return b; } int matrix_path_rec(int m[][16], int i, int j) { // (1, 1) ~ (i, j)의 최고 점수 if (i == 0 || j == 0) { cnt1++; return 0;..
https://www.acmicpc.net/problem/1769 1769번: 3의 배수 문제가 잘 풀리지 않을 때, 문제를 바라보는 시각을 조금만 다르게 가지면 문제가 쉽게 풀리는 경험을 종종 해 보았을 것이다. 여러 가지 방법이 있지만 그 중 하나로 우리가 풀고 싶은 문제를 www.acmicpc.net 코드 #include int cnt = 0; void Get(long int N) { long int sum = 0; if (N < 10) { printf("%d\n", cnt); if (N % 3) printf("NO"); else printf("YES"); return; } while (N != 0) { sum += N % 10; N /= 10; } cnt++; Get(sum); } int main..
https://www.acmicpc.net/problem/1057 1057번: 토너먼트 김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를 www.acmicpc.net 풀이 토너먼트에서 홀수 위치일 경우 우승 시 오른쪽으로, 짝수 위치일 경우 우승 시 왼쪽으로 이동 코드 #include int main() { int N, n1, n2, cnt=0; scanf("%d %d %d", &N, &n1, &n2); while (n1 != n2) { // 지민과 한수가 만나지 않는 경우 if (!n1 || !n2) { printf("-1"); return 0; } if (n1 %..
https://www.acmicpc.net/problem/1092 1092번: 배 첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보 www.acmicpc.net 코드 #include #include #include using namespace std; bool cmp(int a, int b) { return a > b; } vector L, W, Pop; void Time() { int l, w, t = 0, i; // 크레인, 박스 내림차순으로 정렬 sort(L.begin(), L.end(), cmp); sort(W.begin(), W...
https://www.acmicpc.net/problem/1063 1063번: 킹 8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는 www.acmicpc.net 풀이 킹의 좌표 A1에서 행은 1, 열은 A임, 또한 A1의 좌표는 배열에서 (7,0)임을 주의 코드 #include #include #include using namespace std; vector V; void P(int kx, int ky, int sx, int sy, int N) { int nx, ny; int nsx, nsy; for (int i = 0; i < N; i++) { nx..
https://www.acmicpc.net/problem/1059 1059번: 좋은 구간 [9, 10], [9, 11], [9, 12], [10, 11], [10, 12] www.acmicpc.net 풀이 n은 S[0]보다 작을 수 있음. 이 때 좋은 구간의 범위는 n~S[0]이 아닌 1~S[0]. 예제 4에서 [34 59] * [69 99]으로 [34 59], [34 59]...[34 99], [35 59], [35 60]...[35 99] 의 구간에서 [59 59]를 제외한 값이다. 코드 #include #include using namespace std; int main() { int L, S[50], n; int s, e, a, b; scanf("%d", &L); for (int i = 0; i ..
https://www.acmicpc.net/problem/10164 10164번: 격자상의 경로 입력의 첫째 줄에는 격자의 행의 수와 열의 수를 나타내는 두 정수 N과 M(1 ≤ N, M ≤ 15), 그리고 ○로 표시된 칸의 번호를 나타내는 정수 K(K=0 또는 1 < K < N×M)가 차례로 주어지며, 각 값은 공백으 www.acmicpc.net 풀이 (0,0) ~ (15,15)까지의 배열을 구한 후, K 값에 따라 적절한 값을 찾아 서로 곱해주었다. 예제 1의 경우 노란색의 (0,0) ~ (1,2) , 초록색의 (1,2) ~ (2,4)까지의 배열 값을 곱해주면 K=8을 지나는 총 경로의 갯수이다. 이 때 초록색의 (1,2) ~ (2,4)는 (0,0) ~ (1,2) 즉, (0,0) ~ (N-k_x-1,..