11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 코드 n = int(input()) def hanoi(n, start, other, dest): if n == 1: print(start, dest) return hanoi(n-1, start, dest, other) print(start, dest) hanoi(n-1, other, start, dest) print(2**n-1) hanoi(n, 1, 2, 3) 하노이 탑 알고리즘을 알고 있어야 해당 문제를 풀 수 있는데 잘 이해가 잘 안돼서 아래의 ..
재귀
5904번: Moo 게임 Moo는 술자리에서 즐겁게 할 수 있는 게임이다. 이 게임은 Moo수열을 각 사람이 하나씩 순서대로 외치면 되는 게임이다. Moo 수열은 길이가 무한대이며, 다음과 같이 생겼다. m o o m o o o m o o m o o o www.acmicpc.net 코드 n = int(input()) def dc(k, l, n): # K, S(K)의 길이, 구하는 순서 N if n n: break k += 1 print(dc(k, l, n)) 분할정복을 이용하여 Moo 수열의 N번째 문자를 구한다. 큰 수열에서 작은 수열로 분할하는 방식을 쓸 것이므로 n이 포함되는 가장 최소의 S(k)수열을 먼저 구한다. S(k)의 길이 = S(k-1)의 길이+k+3이므로 이걸 이용하면 n이 포함되는 가..
16719번: ZOAC 2018년 12월, 처음 시작하게 된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다. 앞 글자부터 하나씩 보여주는 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로 www.acmicpc.net 코드 import sys sys.setrecursionlimit(10**6) s = input() order = [""]*len(s) def recursion(arr, start): if not arr: return char = min(arr) idx = arr.index(char) order[start+idx] = char print(''.join(order)) recursion(arr[idx+1:], start+idx+1) recursion(arr[:..
28075번: 스파이 첫째 줄에는 민겸이가 임무를 수행하는 총 일수 $N$과 민겸이가 얻고 싶은 최소 기여도 $M$이 공백으로 구분되어 주어진다. 둘째 줄에 민겸이가 정보 수집 임무를 수족관, 시청, 학교에서 수행했 www.acmicpc.net 코드 n, m = map(int, input().split()) progress = list(map(int, input().split()))+list(map(int, input().split())) ans = 0 def recursion(d, prev, total): global ans if d == n+1: if total >= m: ans += 1 return for work in range(2): for place in range(3): if place ==..
1030번: 프렉탈 평면 첫째 줄에 7개의 정수 s, N, K, R1, R2, C1, C2가 주어진다. www.acmicpc.net 문제 프렉탈 평면은 다음과 같이 커진다. 시간 0에서 프렉탈은 흰색 정사각형 하나이다. 단위 시간(1)이 진행될 때마다 N×N개의 크기가 동일한 단위 정사각형으로 나누어진다. 만약 나누어진 정사각형이 흰색이라면 가운데 K×K 정사각형이 검정색으로 채워진다. N과 K는 둘 다 홀수이거나, 둘 다 짝수이다. 예를 들어, N=3, K=1이라면, 시간 1에 3×3 정사각형이 된다. 가운데 정사각형은 검정색이고, 나머지는 흰색이 된다. 시간 2때 9×9 정사각형이 되고, 17개는 검정이고, 나머지는 흰색이다. s, N, K, R1, R2, C1, C2가 주어질 때, 시간 s일 때, ..