목록Algorithm/Recursion (7)
DOTY
10830번: 행렬 제곱 (acmicpc.net) 10830번: 행렬 제곱 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. www.acmicpc.net 지옥 같았던 문제..... #include using namespace std; vector temp_power(vector &tempA, vector &tempB, int N) { vector power_temp(5, vector(5, 0)); for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { int temp = 0; for(int k = 0; k < N; k++) { te..
1629번: 곱셈 (acmicpc.net) 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net 정말 고민을 많이 했던 문제. 처음 방식은 A를 곱한 수를 C로 나누었을 때 나머지를 이용했다. 하지만 시간 초과로 방법을 찾던 중 곱셈의 횟수를 줄이는 방법을 알았다. #include using namespace std; long long divide(long long A, long long B, long long C) { cout C; cout
1780번: 종이의 개수 (acmicpc.net) 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net [ 백준 2630 색종이 자르기 ] 와 크게 다를 것 없었던 문제. #include using namespace std; int paper[2187][2187]; int m_one, zero, one; void divide(int N, int x, int y) { int z = 0; int o = 0; for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) ..
1992번: 쿼드트리 (acmicpc.net) 1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또 www.acmicpc.net 분할 정복문제. 관건은 괄호를 어떻게 처리할까 였다. #include using namespace std; char video[64][64]; string answer = ""; void quadTree(int N, int x, int y) { int cnt = 0; for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { if(video[x + i][y +..
2630번: 색종이 만들기 (acmicpc.net) 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 색종이를 자를 때 마다 확인하면서 풀었다. #include using namespace std; int color[128][128]; int blue = 0; int white = 0; void answer(int N, int x, int y) { int cnt = 0; // cnt == N * N 이면 Blue, cnt == 0 이면 White, 이도 저도 아니면 재귀 for(int..
11729번: 하노이 탑 이동 순서 (acmicpc.net) 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 이렇게 풀면 될거 같은데.. 하다가 풀린 문제 대충 어떤 느낌인지는 알겠는데 확실히 설명하라고 하면 음....ㅜㅜㅜㅜ #include using namespace std; void hanoi(int n, int from, int sub, int to) { if(n == 1) { cout
10872번: 팩토리얼 (acmicpc.net) 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net 재귀 함수 어려워서 처음부터 공부하려고 푼 문제 #include using namespace std; int doFactorial(int N) { if(N > 1) { N *= doFactorial(N-1); } return N; } int main(void) { int N; cin >> N; if(N == 0) { cout