
ํ์ ์ด์งํธ๋ฆฌ์ ํ ์ข ๋ฅ๋ก ๋ฃจํธ๋ ธ๋๊ฐ ์ธ์ ๋ ์ต๋๊ฐ๋๋ ์ต์๊ฐ์ ๊ฐ์ง๋๋ค.
day2์์ ๋ฐฐ์ด ํ์ ์ด์ฉํ ์ฝ๋ฉ๋ฌธ์ ์์!
๋งค์ด ๊ฒ์ ์ข์ํ๋ Leo๋ ๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๋ฅผ K ์ด์์ผ๋ก ๋ง๋ค๊ณ ์ถ์ต๋๋ค. ๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๋ฅผ K ์ด์์ผ๋ก ๋ง๋ค๊ธฐ ์ํด Leo๋ ์ค์ฝ๋น ์ง์๊ฐ ๊ฐ์ฅ ๋ฎ์ ๋ ๊ฐ์ ์์์ ์๋์ ๊ฐ์ด ํน๋ณํ ๋ฐฉ๋ฒ์ผ๋ก ์์ด ์๋ก์ด ์์์ ๋ง๋ญ๋๋ค.(์์ธํ ๋ด์ฉ์ ๋ฐ์ ๋งํฌ์!)
https://school.programmers.co.kr/learn/courses/30/lessons/42626
๋ณด๋ค ๋์ ๋ฐฉ๋ฒ์ ์ํด ํ ์ฐ์ฐ์ ์ฌ์ฉํ์ต๋๋ค.
import heapq as hq
def solution(scoville, K):
hq.heapify(scoville)#ํ ์์ฑ
answer = 0
while True:
first = hq.heappop(scoville)#ํ์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ ๊บผ๋
if first >= K:#K๋ณด๋ค ํฌ๋ฉด ๋ฐ๋ณต๋ฌธ ์ข
๋ฃ
break
if len(scoville) == 0:#ํ ์์ ์์ ๋ค ์์์ ๋๋ ์ ๋ง๋ค์ด์ก์ผ๋ฉด -1๋ฐํ
return -1
second = hq.heappop(scoville)
hq.heappush(scoville, first + second*2)
answer += 1#์์ ๋๋ง๋ค +1
return answer
๋์ ๊ณํ๋ฒ์ด๋ ์ฃผ์ด์ง ์ต์ ํ ๋ฌธ์ ๋ฅผ ์ฌ๊ท์ ์ธ ๋ฐฉ์์ผ๋ก ์ ์ด ๋ถ๋ถ ๋ฌธ์ ๋ก ๋๋์ด ๋ถ๋ถ ๋ฌธ์ ๋ฅผ ํ์ด ์ด ํด๋ฅผ ์กฐํฉํ์ฌ ์ ์ฒด ๋ฌธ์ ์ ํด๋ต์ ์ด๋ฃจ๋ ๋ฐฉ์
๐๋์ ๊ณํ๋ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ์งํ์ ๋ฐ๋ผ ํ์ํด์ผ ํ ๋ฒ์๋ฅผ ๋์ ์ผ๋ก ๊ฒฐ์ ํจ์ผ๋ก์จ ํ์ ๋ฒ์๋ฅผ ํ์ ํ ์ ์์ต๋๋ค.
์๋์ ๊ฐ์ด 5์ ์ฌ์น์ฐ์ฐ๋ง์ผ๋ก 12๋ฅผ ํํํ ์ ์์ต๋๋ค.
12 = 5 + 5 + (5 / 5) + (5 / 5)
12 = 55 / 5 + 5 / 5
12 = (55 + 5) / 5
5๋ฅผ ์ฌ์ฉํ ํ์๋ ๊ฐ๊ฐ 6,5,4 ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ค ๊ฐ์ฅ ์์ ๊ฒฝ์ฐ๋ 4์
๋๋ค.
์ด์ฒ๋ผ ์ซ์ N๊ณผ number๊ฐ ์ฃผ์ด์ง ๋, N๊ณผ ์ฌ์น์ฐ์ฐ๋ง ์ฌ์ฉํด์ ํํ ํ ์ ์๋ ๋ฐฉ๋ฒ ์ค N ์ฌ์ฉํ์์ ์ต์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์์ธํ ๋ด์ฉ์ ๋ฐ์ ๋งํฌ์
https://school.programmers.co.kr/learn/courses/30/lessons/42895
def solution(N, number):
s = [set() for x in range(8)]#์ซ์ ์ฌ์ฉํ์ ์ต๋ 8๋ฒ
for i, x in enumerate(s, start=1):
x.add(int(str(N)*i))
for i in range(len(s)):#i=0์ผ ๋๋ N์ ํ๋ฒ๋ง ์ฌ์ฉํ๊ณ ์ฌ์น์ฐ์ฐ์ ์ ์ฉํ์ง ์์ ๊ฒฝ์ฐ
for j in range(i):
for op1 in s[j]:
for op2 in s[i-j-1]:
s[i].add(op1+op2)
s[i].add(op1-op2)
s[i].add(op1*op2)
if op2!=0:
s[i].add(op1//op2)
if number in s[i]:#๊ฒฝ์ฐ์ ์๋ฅผ ์ ์ฅํ set์์ number์ด ์กด์ฌํ๋ฉด i+1
answer = i+1
break
else:#์์ผ๋ฉด -1๋ฐํ
answer = -1
return answer
ํ ๋ฒ ๋ฐ๋ณตํด์ ์ฌ์ฉํ์ ๋์ ๊ฒฝ์ฐ์์๋ฅผ ๋ง๋ค๊ณ ์ด๋ฅผ ํตํด 2๋ฒ ๋ฐ๋ณตํ์ ๋์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์, ์ด๊ฑธ ์ ์ ๋๋ ค๋๊ฐ๋ฉฐ N๋ฒ ๋ฐ๋ณตํ์ ๋์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ set์ ํตํด ์ค๋ณต ์์ด ์ ์ฅํ ํ์ number์ด ์กด์ฌํ๋ฉด ๋ฐํ์ ํ๊ณ ์์ผ๋ฉด -1์ ๋ฐํํ๊ฒ ํ์์ต๋๋ค.
DFS ํ ์ ์ ์์ ์ธ์ ํ(์์ง ๋ฐฉ๋ฌธํ์ง ์์)์ ์ ์ ๋ฐฉ๋ฌธํ๋, ๊ฐ ์ธ์ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ๊น์ด ์ฐ์ ํ์์ ๋๋ธ ํ ๋ค์ ์ ์ ์ ์งํ
BFS ํ ์ ์ ์์ ์ธ์ ํ(์์ง ๋ฐฉ๋ฌธํ์ง ์์)์ ์ ์ ๋ฐฉ๋ฌธํ๊ณ , ๋ฐฉ๋ฌธํ ๊ฐ ์ธ์ ์ ์ ์ ๊ธฐ์ค์ผ๋ก(๋ฐฉ๋ฌธํ ์์์ ๋ฐ๋ผ_ ๋ ๋ค์ ๋๋น ์ฐ์ ํ์์ ํํจ
์ฃผ์ด์ง ํญ๊ณต๊ถ์ ๋ชจ๋ ์ด์ฉํ์ฌ ์ฌํ๊ฒฝ๋ก๋ฅผ ์ง๋ ค๊ณ ํฉ๋๋ค. ํญ์ "ICN" ๊ณตํญ์์ ์ถ๋ฐํฉ๋๋ค.
ํญ๊ณต๊ถ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด tickets๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ฐฉ๋ฌธํ๋ ๊ณตํญ ๊ฒฝ๋ก๋ฅผ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์์ธํ ๋ด์ฉ์ ๋ฐ์ ๋งํฌ์
https://school.programmers.co.kr/learn/courses/30/lessons/43164
def solution(tickets):
routes = {}
for t in tickets:
routes[t[0]] = routes.get(t[0],[])+[t[1]]
for r in routes:
routes[r].sort(reverse = True)
stack = ["ICN"]
path = []
while len(stack) >0:
top =stack[-1]
if top not in routes or len(routes[top])==0:#๊ฐ ์ ์๋ ๊ณตํญ์ด ์๊ฑฐ๋ ์๋๋ฉด ๊ทธ ํ๋ฅผ ๋ค ์ผ์ ๊ฒฝ์ฐ
path.append(stack.pop())
else:
stack.append(routes[top][-1])
routes[top] = routes[top][:-1]
return path[::-1]#์ญ์์ผ๋ก ์ถ๋ ฅ
๐ก์ฒซ ๋ฒ์งธ ํ์ ์ด์ฉํ "๋ ๋งต๊ฒ"๋ฌธ์ ์์ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํด์ ์์ฑํ์ ๋ ์์๋ฅผ ์ฝ์ ํ๋ ์ฐ์ฐ์์ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ํ์ ์ด์ฉํ์ ๋ ํ์ push๋ O(logn)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ ธ ๋ ์๊ฐ์ ์ธ ํจ์จ์ ๊ฐ์ ธ๊ฐ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค.