목록알고리즘 & 코딩테스트 (73)
한 걸음씩 기록하며
⛏ 문제 파악 최소힙을 구하는 문제 저번에 풀었던 최대힙을 구하는 문제에서 음수 부분만 제거하면 된다. 👉🏻 답안 from sys import stdin import heapq N = int(stdin.readline()) heap = [] for i in range(N): x = int(stdin.readline()) if x != 0: heapq.heappush(heap, [x]) elif x == 0: if heap: print(heapq.heappop(heap)[0]) else: print("0") 📑 간단한 설명 그냥 간단하게 지난 번 리스트에서 [1]을 제거했다.
⛏ 문제 파악 최대힙을 구하는 문제 시간초과 때문에 heapq을 임포트 안하고 그냥 구현하면 시간초과가 뜬다 파이썬 내장모듈인 heapq은 최소힙만 지원하기 때문에 최대힙으로 사용하기 위해서는 값을 음수로 변환하는 방법을 사용해야한다. 음수로 변환하는 것은 튜플이나 리스트를 이용하거나, 값에 * -1을 하는 방법이 있다. 👉🏻 답안 from sys import stdin import heapq N = int(stdin.readline()) heap = [] for i in range(N): x = int(stdin.readline()) if x != 0: heapq.heappush(heap, [-x, x]) elif x == 0: if heap: print(heapq.heappop(heap)[1]) e..
⛏ 문제 파악 세계 질서를 잘 잡아줘야한다. 우리는 그 질서를 스택 이용하여 잡겠다. 스택은 후입선출이다. 👉🏻 답안 from sys import stdin while True: stack = [] sentence= stdin.readline().rstrip() if sentence == ".": break for i in sentence: if i == "(" or i == "[": stack.append(i) elif i == ")": if stack and stack[-1] == "(": stack.pop() else: stack.append(")") break elif i == "]": if stack and stack[-1] == "[": stack.pop() else: stack.append..
⛏ 문제 파악 스택(후입선출)을 구현하는 문제 주어진 괄호가 VPS인지 판별하는 문제 약간의 포인트라면 ())( 와 같이 )가 먼저 닫히는 경우 NO 라고 리턴해야하는 것? 👉🏻 답안 from sys import stdin N = int(stdin.readline()) results = [] for _ in range (N): state = 0 PS = list(stdin.readline().strip()) for check in PS: if check == "(": state += 1 elif check == ")" and state == 0: state += 100 else: state -= 1 if state == 0: results.append("YES") else: results.append(..
⛏ 문제 파악 Deque를 구현하는 문제이면서 동시에, circular Queue를 보여주기 위한? 문제 👉🏻 답안 from sys import stdin from collections import deque N, M = map(int, stdin.readline().split(' ')) nums = list(map(int, stdin.readline().split(' '))) arr = deque([]) count = 0 for i in range(1, N+1): arr.append(i) for num in nums: if num == arr[0]: arr.popleft() elif arr.index(num) < len(arr)/2: while num != arr[0]: arr.append(arr.p..
⛏ 문제 파악 문제 이해가 어려웠던 문제이다. 스택의 후입선출(LIFO, Last-In First-Out)을 생각하면 이해가 괜찮아지는 문제다. 입력은 오름 차순으로 이루어지고, 입력을 받을 때마다 다음의 상황을 고려하면서 풀면 된다. 내가 입력하려는 수가 수열에 넣어야하는 수와 같다면, 스택에 push하고 pop 해준다. 이 때 수열에 넣어야하는 수와 스택에 있는 수가 같다면 계속해서 pop을 해준다. 내가 입력하려는 수가 수열에 넣어야하는 수와 다르다면 스택에 push만 한다. 예시로 주어진 테스트 케이스 1번을 천천히 살펴보면서, 문제를 설명해보겠다. 스택에 push 하면 스택은 [ 1 ] 이고, 수열 [ 4, 3, 6, 8, 7, 5, 2, 1 ] 에서 4와 다르므로 패스 스택에 push하면 스..
⛏ 문제 파악 큐(queue)를 직접 간단하게 구현해보는 문제 큰 어려움은 없지만 제한 시간이 짧다. 👉🏻 답안 import sys from collections import deque K = int(sys.stdin.readline()) queue = deque([]) for _ in range(K): x = sys.stdin.readline().split() if x[0] == 'push': queue.append(x[1]) elif x[0] == 'pop': if len(queue) != 0: print(queue.popleft()) else: print(-1) elif x[0] == 'size': print(len(queue)) elif x[0] == 'empty': if len(queue) =..