백준(Python) 풀이/자료 구조 13

백준(Python) 1655번 가운데를 말해요 풀이

Python으로 구현한 1655번 가운데를 말해요 문제 풀이입니다. https://www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net # PyPy3 정답 import heapq n = int(input()) leftheap = [] rightheap = [] result = [] for _ in range(n) : value = int(input()) if len(leftheap) == len(rightheap) : heapq.heappush(l..

백준(Python) 1202번 보석 도둑 풀이

Python으로 구현한 1202번 보석 도둑 문제 풀이입니다. https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net import heapq n, k = map(int, input().split()) data = [] for _ in range(n) : w, v = map(int, input().split()) # 무게, 가격 heapq.heappush(data, (w, v)) bag = [..

백준(Python) 1715번 카드 정렬하기 풀이

Python으로 구현한 1715번 카드 정렬하기 문제 풀이입니다. https://www.acmicpc.net/problem/1715 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net import heapq n = int(input()) heap = [] for _ in range(n) : heapq.heappush(heap, int(input())) if n == 1 : print(0) else : total = 0 while len(heap) > 1 : # 가장 작은 두개의 값 꺼내기 pop_1..

백준(Python) 11286번 절댓값 힙 풀이

Python으로 구현한 11286번 절댓값 힙 문제 풀이입니다. https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net # PyPy3 정답 import heapq n = int(input()) heap = [] result = [] for _ in range(n) : x = int(input()) if x == 0 : try : result.append(heapq.heappop(heap)[1]) except : result.app..

백준(Python) 11279번 최대 힙 풀이

Python으로 구현한 11279번 최대 힙 문제 풀이입니다. https://www.acmicpc.net/problem/11279 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 www.acmicpc.net import heapq n = int(input()) heap = [] result = [] for _ in range(n) : x = int(input()) if x == 0 : if not heap : result.append(0) else : result.append(-heapq.heappop(heap)) el..

백준(Python) 1927번 최소 힙 풀이

Python으로 구현한 1927번 최소 힙 문제 풀이입니다. https://www.acmicpc.net/problem/1927 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net import heapq n = int(input()) data = [] result = [] for _ in range(n) : x = int(input()) if x == 0 : if not data : result.append(0) else : result.append(heapq.heappop(data)) else..

백준(Python) 1158번 요세푸스 문제 풀이

Python으로 구현한 1158번 요세푸스 문제 문제 풀이입니다. https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net n, k = map(int, input().split()) data = [i for i in range(1, n + 1)] index = 0 result = [] for _ in range(n) : index += (k - 1) if index >= len(data) : index %= len(data) result.append(str(data[index])) data.pop(index) print('') 1. 1부터 n까..

백준(Python) 1874번 스택 수열 풀이

Python으로 구현한 1874번 스택 수열 문제 풀이입니다. https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net n = int(input()) count = 0 stack = [] result = [] flag = True for _ in range(n) : data = int(input()) while count < data : count += 1 stack.ap..

백준(Python) 9012번 괄호 풀이

Python으로 구현한 9012번 괄호 문제 풀이입니다. https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net t = int(input()) for _ in range(t) : data = list(input()) open = 0 for d in data : if d == '(' : open += 1 else : open -= 1 if open 0..

백준(Python) 1406번 에디터 풀이

Python으로 구현한 1406번 에디터 문제 풀이입니다. https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net import sys input = sys.stdin.readline data = list(input().rstrip()) temp = [] n = int(input()) for _ in range(n) : order = list(input().split()) if order[0] == 'L' : # 커서를 왼쪽으로 한 칸 이동 if data..