전체 글 219

[큐/Python] 1021번: 회전하는 큐 - 효과는 굉장했다!

1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 알고리즘 분류 자료 구조 덱 SOLUTION import sys from collections import deque N, M = map(int, sys.stdin.readline().split()) nums = list(map(int, sys.stdin.readline().split())) queue = deque([i for i in range(1,N+1)]) cnt = 0 for num in nums: while True: if queue[0] == n..

[큐/Python] 2164번: 카드2 - 효과는 굉장했다!

2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 알고리즘 분류 자료 구조 큐 SOLUTION import sys from collections import deque N = int(sys.stdin.readline()) deque = deque([i for i in range(1,N+1)]) while(len(deque) > 1): deque.popleft() # 카드에서 가장위에 있는 수 버림 deque.rotate(-1) # rotate()함수를 이용해 deque안에 있는 값들을 왼쪽으로 한칸씩 이동 0번..

[스택/Python] 4949번: 균형잡힌 세상 - 효과는 굉장했다!

4949번: 균형잡힌 세상 하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마 www.acmicpc.net 알고리즘 분류 자료 구조 문자열 스택 SOLUTION import sys while True: s = sys.stdin.readline().rstrip() if s == '.': # .이 입력으로 들어오기전까지 while문 반복 break string = [] state = True for i in s: if i == '(' or i == '[': # 괄호와 '.' 을 제외한 나머지 문자는 고려X string.append(i) elif i == '..

[스택/Python] 17298번: 오큰수 - 효과는 굉장했다!

17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 알고리즘 분류 자료 구조 스택 SOLUTION import sys A = int(sys.stdin.readline()) num = list(map(int, sys.stdin.readline().split())) stack = [] ans = [-1 for _ in range(A)] for i in range(A): # 스택이 비지 않고 stack의 가장 마지막으로 append 된 인덱스인 num[idx]가 num[i] 보다 작다면 while stack and num[stac..

[정렬/Python] 18870번: 좌표 압축 - 효과는 굉장했다!

18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net 알고리즘 분류 정렬 값 / 좌표 압축 SOLUTION import sys N = int(sys.stdin.readline()) num = list(map(int, sys.stdin.readline().split())) num_list = list(sorted(set(num))) # set을 사용해 중복된 수 제거 num_list = {num_list[i] : i for i in range(len(num_list))..

[정렬/Python] 10814번: 나이순 정렬 - 효과는 굉장했다!

10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 알고리즘 분류 정렬 SOLUTION import sys people = [] for _ in range(int(sys.stdin.readline())): age, name = sys.stdin.readline().split() people.append((int(age), name)) # people.sort() sort()함수를 사용하면 나이 뿐만 아니라 이름의 알파벳 순으로도 정렬되기 떄문에 lambda를 사용한다 people.sort(key=lambda people..

[브루트포스/Python] 1436번: 영화감독 숌 - 효과는 굉장했다!

1436번: 영화감독 숌 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타 www.acmicpc.net 알고리즘 분류 브루트포스 알고리즘 SOLUTION import sys N = int(sys.stdin.readline()) cnt = 0 END_num = 666 # 666 이전의 숫자는 고려할 필요 X while True: if '666' in str(END_num): cnt += 1 if cnt == N: print(END_num) break END_num += 1 # 브루트포스 개념 적용, END_num에 1씩 더해가면서 계속 666이 숫자안에 들어있는지..

[브루트포스/Python] 2798번: 블랙잭 - 효과는 굉장했다!

2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 알고리즘 분류 브루트포스 알고리즘 SOLUTION import sys import itertools # combinations 함수를 쓰기 위해 itertools 모듈 import N, M = map(int, sys.stdin.readline().split()) # combinations 함수 이용해 각각의 다른 조합 구함 card_list = list(itertools.combinations(map(int, sys.stdin.r..

[재귀/Python] 11729번: 하노이 탑 이동 순서 - 효과는 굉장했다!

11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 알고리즘 분류 재귀 SOLUTION import sys def hanoi_tower(N, first, second, third): if N == 1: print(first, third) else: hanoi_tower(N-1, first, third, second) print(first, third) hanoi_tower(N-1, second, first, third) N = int(sys.stdin.readline()) print(2**N-1) ha..

[재귀/Python] 10870번: 피보나치 수 5 - 효과는 굉장했다!

10870번: 피보나치 수 5 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 알고리즘 분류 수학 구현 SOLUTION import sys def fibonacci(n): if n