![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/ba6I2m/btrN4jSUZnC/YWueKqqnxQlUKsJOPw6gKk/img.png)
11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net def hanoi(n, s, e): #hanoi(n개의 원판, 시작 장대, 도착 장대) if n == 1 : #원판이 1개인 경우 print(s, e) return hanoi(n - 1, s, 6 - s - e) #n-1개의 원판 중간 장대로 이동 print(s, e) #가장 큰 원판 도착 장대로 이동 hanoi(n - 1, 6 - s - e, e) #n-1개의 원판 도착 장대로 이동 N = int(input()) print(2**N - 1) #옮긴 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/BH53O/btrNSUliEzE/UDP6R4TTsg3vkeQgnkPC50/img.png)
2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net def draw(scale): if scale == 3: return ['***','* *','***'] star_unit = draw(scale // 3) star_res = [] for star in star_unit: star_res.append(star * 3) for star in star_unit: star_res.append(star + ' ' * (scale//3) + star) for star in star_unit: ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dahM2u/btrNSPKXkwB/mKrtAULrTJ92qKm3p97izK/img.png)
24060번: 알고리즘 수업 - 병합 정렬 1 첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 500,000), 저장 횟수 K(1 ≤ K ≤ 108)가 주어진다. 다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109) www.acmicpc.net def merge_sort(A, p, r): # A[p ~ r]을 오름차순 정렬한다. if p < r: q = (p + r) // 2; # q는 p, r의 중간 지점 merge_sort(A, p, q) # 전반부 정렬 merge_sort(A, q + 1, r) # 후반부 정렬 merge(A, p, q, r) # 병합 # A[p~q]와 A[(q+1)~r]을 병합하여 A[p~r]을 오름차순 정렬된 상태로 만든다. # A..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dOoi7v/btrNKg7U113/g9XS4CJEKivIe1rtvH9Si1/img.png)
25501번: 재귀의 귀재 각 테스트케이스마다, isPalindrome 함수의 반환값과 recursion 함수의 호출 횟수를 한 줄에 공백으로 구분하여 출력한다. www.acmicpc.net def recursion(s, l, r): global cnt cnt += 1 if l >= r: return 1 elif s[l] != s[r]: return 0 else: return recursion(s, l+1, r-1) def isPalindrome(s): return recursion(s, 0, len(s)-1) T = int(input()) for i in range(T): s = input() cnt = 0 print(isPalindrome(s), cnt) *key point: 함수 호출 횟수를 할당할..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cxvpVg/btrNGwwDxev/AlZsFonm5qWr1TKA0I2NvK/img.png)
10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net def factorial(N): ans = 1 if N > 0 : ans = N * factorial(N-1) return ans print(factorial(int(input()))) *key point: def를 이용하여 함수를 정의하는 과정에서 해당 함수를 사용하게 되면 재귀함수가 된다.
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cdSCbB/btrNwF3iy2N/6i3atkFFZAkbJyZkMv9EG1/img.png)
18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net import sys N = int(input()) coord_list = list(map(int, sys.stdin.readline().split())) coord_list_sorted = sorted(list(set(coord_list))) coord_dict = {} for i in range(len(coord_list_sorted)): coord_dict[coord_list_sorted[i]] = i for ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/PA3iA/btrNvMVEgtA/lyFcdgHTiLLrgM0Z62H5OK/img.png)
10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net N = int(input()) people = [] for i in range(N): people.append(list(input().split())) people.sort(key=lambda x: int(x[0])) for person in people: print(person[0], person[1]) *key point: sort의 key 옵션을 활용(lamda 식 이용)하여 주어진 조건에 맞는 정렬이 쉽게 가능하다.
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dcqA6A/btrNwGG6zgK/3FwReQLTcvMaommSvif2A1/img.png)
1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net N=int(input()) word_list=[] for i in range(0,N): word_list.append(input()) word_list=list(set(word_list)) word_list.sort() word_list.sort(key=len) for word in word_list: print(i) *key point: sort 함수의 key 옵션을 이용하여 길이에 따른 정렬을 수행할 수 있다. set 함수를 이용해서는 중복을 제거..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/QAJ7h/btrNvOTpwc5/uS2S6Tn3Yffkgfhu0XU7a0/img.png)
11651번: 좌표 정렬하기 2 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net N = int(input()) dot_list = [] for i in range(N): x, y = map(int, input().split()) dot_list.append([y, x]) dot_list.sort() for dot in dot_list: print(dot[1], dot[0]) *key point: 11650번 문제에서 입력값의 x, y를 바꾸어 준 뒤 정렬하여 출력 시 다시 바꾸어주면 쉽..
- Total
- Today
- Yesterday
- 17103
- 26069
- 2738
- 코육대
- MySQL
- 20920
- 25192
- 24060
- Python
- Programmers
- SQL
- 항해+
- programmer
- 1269
- 벡준
- 10807
- 24313
- 항해 플러스
- 25501
- 13909
- 2587
- 24723
- 4134
- 2903
- 5597
- 백준
- til
- 13241
- Wil
- 2053
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |