๐ก14425 ๋ฌธ์์ด ์งํฉ
์ค๋ช
- N๊ฐ์ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ง ์งํฉ S๊ฐ ์ฃผ์ด์ก์ ๋, ์ฃผ์ด์ง๋ M๊ฐ ๋ฌธ์์ด ์ค์์ ์งํฉ S์ ์ํ๋ ๋ฌธ์์ด์ด ๋ช ๊ฐ์ธ์ง ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
- N๊ฐ์ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ฉด ๊ทธ ๋ฌธ์์ด์ key๊ฐ์ผ๋ก 0์ value๊ฐ์ผ๋ก ํ๋ ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋ ๋ค.
- M๊ฐ์ ๋ฌธ์์ด์ ์ฐจ๋ก๋ก ๋๋ฉด์ ์งํฉS์์ ์กด์ฌํ๋ฉด count ๊ฐ์ +1 ํด์ค๋ค. ๋์ ๋๋ฆฌ๋ ํด์ํ ์ด๋ธ๋ก ๊ตฌํ๋์ด ์์ด ๋ด์ฉ์ ์์ฐจ์ ์ผ๋ก ๋ณด๋ ๊ฒ์ด ์๋๋ผ ํด๋น ๋จ์ด๋ฅผ ๋ฐ๋ก ์ฐพ์๊ฐ๊ธฐ ๋๋ฌธ์ ์ด ๊ณผ์ ์ ์๊ฐ๋ณต์ก๋๊ฐ O(1)์ด๋ค.
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
s = {}
count = 0
for i in range(n):
str = input().rstrip()
s[str] = 0
for i in range(m):
problem = input().rstrip()
if(problem in s):
count += 1
print(count)
๐ก11279 ์ต๋ ํ
์ค๋ช
- ์ฐ์ ์์ ํ๋ฅผ ํ์ฉํด ํธ๋ ๋ฌธ์ ์ด๋ค.
- heapq๋ ๊ธฐ๋ณธ์ผ๋ก ์ต์ ํ์ด๊ธฐ ๋๋ฌธ์, ๊ฐ์ ๋ฃ์ ๋ - ๋ถํธ๋ฅผ ๋ถ์ฌ ๋ฃ์ด ์ต๋ํ์ผ๋ก ๋ง๋ค์ด์ค๋ค.
import sys
import heapq
input = sys.stdin.readline
n = int(input())
heap = []
for i in range(n):
num = int(input())
if(num == 0):
if(heap):
print(-heapq.heappop(heap))
else:
print(0)
else:
heapq.heappush(heap, -num)
๐ก2075 N๋ฒ์งธ ํฐ ์
์ค๋ช
- N×N์ ํ์ ์ฑ์์ง ์๋ค ์ค N๋ฒ์งธ๋ก ํฐ ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. (ํน์ง : ๋ชจ๋ ์๋ ์์ ์ ํ ์นธ ์์ ์๋ ์๋ณด๋ค ํฌ๋ค)
- ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ์์ด N×N๊ฐ์ ์๋ฅผ ๋ค ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ถ๊ฐ๋ฅํ๋ค.
- N๋ฒ์งธ๋ก ํฐ ์๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ฏ๋ก ํฌ๊ธฐ๊ฐ N์ธ ์ต์ ํ์ ์ด์ฉํ์ฌ ํผ๋ค.
- ํ์ ํฌ๊ธฐ๊ฐ N๋ณด๋ค ์์ ๊ฒฝ์ฐ
- ํ์ ์๋ฅผ pushํด์ค๋ค.
- ํ์ ํฌ๊ธฐ๊ฐ N๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ
- ์ฃผ์ด์ง ์๊ฐ ํ์ฌ ํ์์ ์ ์ผ ์์ ์๋ณด๋ค ์๋ค๋ฉด ๊ทธ๋ฅ PASS
- ์ฃผ์ด์ง ์๊ฐ ํ์ฌ ํ์์ ์ ์ผ ์์ ์๋ณด๋ค ํฌ๋ค๋ฉด popํ๊ณ ์ฃผ์ด์ง ์๋ฅผ ๋ฃ์ด์ค๋ค.
- ํ์ ํฌ๊ธฐ๊ฐ N๋ณด๋ค ์์ ๊ฒฝ์ฐ
import sys
import heapq
input = sys.stdin.readline
n = int(input())
heap = []
for _ in range(n):
for i in list(map(int, input().split())):
if(len(heap) < n):
heapq.heappush(heap, i)
else:
if(heap[0] < i):
heapq.heappop(heap)
heapq.heappush(heap, i)
print(heapq.heappop(heap))
๐ก21939 ๋ฌธ์ ์ถ์ฒ ์์คํ Version 1
์กฐ๊ฑด๋ค์ด ๊น๋ค๋ก์ ๋ง์ด ํ๋ ธ๋ ๋ฌธ์ ์๋ค. ๊ฒฐ๊ตญ "์ถ์ฒ ๋ฌธ์ ๋ฆฌ์คํธ์ ์๋ ๋ฌธ์ ๋ฒํธ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค. ์ด์ ์ ์ถ์ฒ ๋ฌธ์ ๋ฆฌ์คํธ์ ์๋ ๋ฌธ์ ๋ฒํธ๊ฐ ๋ค๋ฅธ ๋์ด๋๋ก ๋ค์ ๋ค์ด ์ฌ ์ ์๋ค" ๋ผ๋ ์กฐ๊ฑด์ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ง ๋ชจ๋ฅด๊ฒ ์ด์ ํด๋น๋ถ๋ถ์ ๊ตฌ๊ธ๋ง์ ์ฐธ๊ณ ํด์ ํ์๋ค. ๐ฆ
ํ์ด ์ค๋ช
- ๋ฌธ์ ๋ฒํธ, ๋์ด๋๋ฅผ ๊ฐ์ง ๋ฌธ์ ๋ค์ด ์ฃผ์ด์ก์ ๋, ๋ช ๋ น์ด์ ๋ฐ๋ผ ๊ฐ์ฅ ์ด๋ ค์ด ๋ฌธ์ ์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋, ๊ฐ์ฅ ์ฌ์ด ๋ฌธ์ ์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค.
- ๋์ด๋๊ฐ ๋์ ์์ผ๋ก ๋ ํ, ๋์ด๋๊ฐ ๋ฎ์ ์์ผ๋ก ๋ ํ ๋๊ฐ๋ฅผ ์ฌ์ฉํ๋ค. ์ฆ, ์ด์ค ์ฐ์ ์์ํ ๋ฅผ ํ์ฉํ๋ค.
- ์ด์ค ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ ๋ ํฌ์ธํธ๋ ๋ ํ๋ฅผ ์๋ก ๋๊ธฐํ ํด์ฃผ๋ ๊ฒ์ด๋ค.
- ๋๋ ๋ฌธ์ ๋ฒํธ๋ฅผ key๋ก ๊ฐ์ง๊ณ boolean๊ฐ์ value๋ก ๊ฐ์ง dict๋ฅผ ํ์ฉํ์ฌ ํด๋น ๋ฌธ์ ๊ฐ ๋ฆฌ์คํธ ๋ด์ ์๋์ง ์๋์ง ๊ตฌ๋ถํด์ฃผ๊ณ , ์๋ค๋ฉด ์ทจ๊ธํด์ฃผ์ง ์๋ ๋ฐฉ๋ฒ์ผ๋ก ๋๊ธฐํ ํด์ฃผ์๋ค.
- ์ด ๋ฌธ์ ์ ์ฃผ์ด์ง ์กฐ๊ฑด ์ค ์ถ์ฒ ๋ฌธ์ ๋ฆฌ์คํธ์ ์๋ ๋ฌธ์ ๋ฒํธ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค. ์ด์ ์ ์ถ์ฒ ๋ฌธ์ ๋ฆฌ์คํธ์ ์๋ ๋ฌธ์ ๋ฒํธ๊ฐ ๋ค๋ฅธ ๋์ด๋๋ก ๋ค์ ๋ค์ด ์ฌ ์ ์๋ค๋ผ๋ ์กฐ๊ฑด์ด ์ข ์ด๋ ค์ ๋๋ฐ, ์ํฉ์ ๋ฐ์ ธ ๋ณด์๋ฉด
10๋ฒ ๋ฌธ์ [โ]๋ heqp์์ pop๋์๊ฑฐ๋ "solved" ์ฒ๋ฆฌ๋์ด ๋ฆฌ์คํธ์ ์๋ ๋ฌธ์ , 10๋ฒ ๋ฌธ์ [โญ]๋ ์๋ก ๋ค์ด์ ๋ฆฌ์คํธ์ ์๋ ๋ฌธ์ ๋ผ๊ณ ํ์.
- 10๋ฒ ๋ฌธ์ [โ]๊ฐ heqp์์ pop๋์๊ฑฐ๋ “solved” ์ฒ๋ฆฌ๋์ด in_list[10] = False์ธ ์ํฉ
- 10๋ฒ ๋ฌธ์ [โญ]๋ฅผ "add"ํ๋ผ๋ ๋ช ๋ น์ด ๋ค์ด์ด
- ์์ง in_list[10] = False์ผ ๋ฟ์ด์ง ์ค์ ๋ก heap๋ด์๋ 10๋ฒ ๋ฌธ์ [โ]๊ฐ ๋ค์ด์์ ์ ์๋ค.
- ๋ฐ๋ผ์ ๊ทธ๋ฅ add๋ฅผ ํด๋ฒ๋ฆฌ๊ณ in_list[10] = Ture๋ก ๋ฐ๊ฟ ๊ฒฝ์ฐ ์ดํ ํด์์ 10๋ฒ ๋ฌธ์ [โ]๊ฐ ๋ฆฌํด ๋ ์ ์๋ค.
- ํด๊ฒฐ โก๏ธ addํ๊ธฐ ์ ์ heap์ top๋ถ๋ถ์ in_list[*] = False์ธ ๊ฒ์ด ์๋ค๋ฉด ๋ค POPํด์ ์์ ์ค๋ค.
์ฝ๋ ์ค๋ช
- ์ค๋ณต๋ ์ฝ๋๋ฅผ ํจ์๋ก ๋ฌถ์ด ๋ฉ์ธ๋ก์ง์ ๊ฐ๋ ์ฑ ์๊ฒ ํด์ฃผ์๋ค.
- addToBothHeap(problem, level) ํจ์
- ๋ฌธ์ ๋ฒํธ์ ๋์ด๋๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ด์ค ์ฐ์ ์์ ํ์ ๋ฃ์ด์ค๋ค. ์ด๋ in_list๋ฅผ True๋ก ์ค์ ํด์ค๋ค.
- popMaxHeapWhileTopInList() ํจ์
- Max_Heap์ top์ ์๋ ์์๊ฐ ๋ฆฌ์คํธ ๋ด์ ์๋ ํจ์์ผ ๋๊น์ง ๊ณ์ popํด์ค๋ค.
- popMinHeapWhileTopInList() ํจ์
- Min_Heap์ top์ ์๋ ์์๊ฐ ๋ฆฌ์คํธ ๋ด์ ์๋ ํจ์์ผ ๋๊น์ง ๊ณ์ popํด์ค๋ค.
import sys
import heapq
from collections import defaultdict
input = sys.stdin.readline
max_heap = []
min_heap = []
in_list = defaultdict(bool)
def addToBothHeap(problem, level):
heapq.heappush(max_heap, (-level, -problem))
heapq.heappush(min_heap, (level, problem))
in_list[problem] = True
def popMaxHeapWhileTopInList():
while(not in_list[-max_heap[0][1]]):
heapq.heappop(max_heap)
def popMinHeapWhileTopInList():
while(not in_list[min_heap[0][1]]):
heapq.heappop(min_heap)
n = int(input())
for i in range(n):
problem, level = map(int, input().split())
addToBothHeap(problem, level)
m = int(input())
for i in range(m):
operation = input().split()
if(operation[0] == "recommend"):
if(operation[1] == '1'):
popMaxHeapWhileTopInList()
print(-max_heap[0][1])
else:
popMinHeapWhileTopInList()
print(min_heap[0][1])
elif(operation[0] == "add"):
popMaxHeapWhileTopInList()
popMinHeapWhileTopInList()
problem, level = int(operation[1]), int(operation[2])
addToBothHeap(problem, level)
elif(operation[0] == "solved"):
problemNum = int(operation[1])
in_list[problemNum] = False
'Group Study (2022-2023) > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Coding Test] 5์ฃผ์ฐจ - DFS์ BFS (0) | 2023.02.19 |
---|---|
[Coding Test] 4์ฃผ์ฐจ - Implementation (0) | 2023.02.10 |
[Coding Test] 3์ฃผ์ฐจ - Greedy (0) | 2023.02.05 |
[Coding Test] 1์ฃผ์ฐจ - Data Structure1 (์คํ, ํ, Deque) (0) | 2023.01.22 |
[Coding Test] ์คํฐ๋ ๊ณํ ๋ฐ ๊ทธ๋ผ์ด๋ ๋ฃฐ (0) | 2023.01.16 |