์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Airflow
- Spark
- ๋น ๋ฐ์ดํฐ
- colab
- DataFrame Hint
- Speculative Execution
- etl
- off heap memory
- Kubernetes
- AQE
- spark executor memory
- Spark Partitioning
- Salting
- KDT_TIL
- ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ
- Dag
- backfill
- Spark SQL
- mysql
- aws
- topic
- Spark Caching
- Docker
- CI/CD
- redshift
- Kafka
- SQL
- disk spill
- k8s
- Spark ์ค์ต
- Today
- Total
JUST DO IT!
[TIL] KDT_20230414 ๋ณธ๋ฌธ
๐ KDT WEEK 2 DAY 5 TIL
์ฝ๋ฉํ ์คํธ ํ์ด์ ์๊ณ ๋ฆฌ์ฆ ํ์ต
- ํ(Heap)
- ๊น์ด, ๋๋น ์ฐ์ ํ์(DFS / BFS)
- ๋์ ๊ณํ๋ฒ(Dynamic Programming)
ํ(Heap) ์๊ณ ๋ฆฌ์ฆ
- ์ ๋ ฌ(Heapsort)๊ณผ ์ฐ์ ์์ ํ(priority queue)์ ์ ์ฉ
- ์ต๋, ์ต์ ์์๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ๋๋ฐ ์ ์ฉํ๋ค!
- ํ์ด์ฌ์ heapq ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๊ตฌํ ๊ฐ๋ฅ
์์ ์ฝ๋
import heapq # Heap ๋ผ์ด๋ธ๋ฌ๋ฆฌ
def solution(scoville, K):
answer = 0
heapq.heapify(scoville) # ํน์ ๋ฆฌ์คํธ๋ฅผ ํ์ผ๋ก ๋ง๋ฆ
while True: # ์๋ if ์กฐ๊ฑด์ผ๋ก ๋ฐ๋ณต ์ข
๋ฃ
min1 = heapq.heappop(scoville) # ํ pop
if min1 >= K:
break
elif len(scoville) == 0: # ์๋ฌด๋ฆฌ ํฉ์ณ๋ K๋ฅผ ๋์ง๋ ๋ชปํ์
return -1
min2 = heapq.heappop(scoville)
new = min1 + min2 * 2
heapq.heappush(scoville, new) # ํ push
answer += 1
return answer
์ค์ฝ๋น ์ง์๊ฐ ๊ฐ์ฅ ๋ฎ์ ์์ ๋๊ฐ๋ฅผ ํฉ์ณ ๋ชจ๋ ์์์ ํน์ ์ค์ฝ๋น ์ง์(K)๋ฅผ ๋๋๋ก ๋ง๋๋ ์ฝ๋.
์ค์ฝ๋น์ง์์ ๊ณ์ฐ์ new = min1 + min2 * 2 ์ด๋ค.
ํ์ด์ฌ์ heapq ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ด ๊ตฌํ์ด ๋งค์ฐ ํธ๋ฆฌํ๋ค! ๐คญ
๊น์ด ์ฐ์ ํ์(DFS)
- ํ ์ ์ ์์ ์ธ์ ํ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ๋, ๊ฐ ์ธ์ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ๊น์ด ์ฐ์ ํ์์ ๋๋ธ ํ ๋ฐฉ๋ฌธ ์งํ
- ์คํ์ ์ด์ฉํ์ฌ ์ด๋ ์ ์ ์์ DFS๋ฅผ ํ๊ณ ์๋์ง๋ฅผ ๊ธฐ์ตํ๊ณ ๋๋์๊ฐ์ผํจ
- ์ ์ ์์ ๊ธธ์ด ์์ผ๋ฉด ๋ค์ด๊ฐ ์ ์์ ๋งํผ ๋ค์ด๊ฐ(DFS) ๋ค์, ๋งํ์ ๋ ๊ธธ์ด ๋ณด์ผ ๋ ๊น์ง ๋๋์๊ฐ๋ ๊ฒ!
def solution(tickets):
ticketDic = {}
for t in tickets: # Dictionary์ tickets ์ ์ฅ
ticketDic[t[0]] = ticketDic.get(t[0], []) + [t[1]]
for tD in ticketDic: # ticket๋ง๋ค ๋์ฐฉ์ง๋ฅผ ์ญ์์ผ๋ก ์ ๋ ฌ
ticketDic[tD].sort(reverse = True)
stack = ["ICN"] #์ถ๋ฐ์ง
resultPath = [] #๊ฒฝ๋ก
while len(stack) > 0:
top = stack[-1]
if not top in ticketDic or len(ticketDic[top]) == 0: #๋ค์ ๊ฒฝ๋ก ์์ฒด๊ฐ ์์๊ฑฐ๋, ๋ ์ด์ ํ๊ฐ ์๋ ๊ฒฝ์ฐ
resultPath.append(stack.pop())
else:
stack.append(ticketDic[top][-1])
ticketDic[top] = ticketDic[top][:-1]
return resultPath[::-1]
tickets ์ธ์๋ฅผ ํตํด [์ถ๋ฐ์ง, ๋์ฐฉ์ง] ํ ๋ค์ ๋ฐฐ์ด์ ๋ฐ์ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ์ํํ๋ path๋ฅผ ๋ง๋๋ ๋ฌธ์ ๋ค.
์คํ์ผ๋ก ๊ตฌํํ DFS๋ฅผ ํตํด ๊ตฌํํ๋ค.
์ํ๋ฒณ ์์ผ๋ก ๋จผ์ ์ฌํํด์ผ ํ๋ ์กฐ๊ฑด์ sort๋ก ๋จผ์ ํด๊ฒฐํ๊ณ ,
์ฌํ์ ๋ค๋๋ค ๋ค์ ๊ฒฝ๋ก๊ฐ ์๋ ์ฌํ์ง๋ฅผ ๋ง๋๋ฉด, ๋จผ์ path์ ๋ฃ์ด๋๊ณ ๋ง์ง๋ง์ ์ญ์์ผ๋ก ์ถ๋ ฅํ์ฌ ๋ง์ง๋ง ์ฌํ์ง๋ก ๋ง๋๋ ๊ฒ ์ธ์์ ์ด์๋ค. ๐
DFS์ ๊ตฌ์กฐ์ ๋ฌธ์ ์ ๊ด๊ณ๋ฅผ ์ดํดํ๋ ๋ฐ์ ์ค๋ ๊ฑธ๋ ธ๋ ๋ฌธ์ ..๐
๋๋น ์ฐ์ ํ์(BFS)
- ํ ์ ์ ์์ ์ธ์ ํ ๋ชจ๋ ์ ์ ์ ๋จผ์ ์์๋๋ก ๋ฐฉ๋ฌธํ๊ณ , ๋ฐฉ๋ฌธํ ์ธ์ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ๋ฐฉ๋ฌธํ ์์์ ๋ฐ๋ผ ๋๋น ์ฐ์ ํ์์ ์งํํ๋ค
- ํ๋ฅผ ์ด์ฉํ์ฌ ์ด๋ ์ ์ ์์ BFS๋ฅผ ํด์ผ ํ๋์ง๋ฅผ ๊ธฐ๋กํ๊ณ ์งํํด์ผ ํ๋ค!
๋์ ๊ณํ๋ฒ(Dynamic Programming)
- ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ์์ ๋ถ๋ถ ๋ฌธ์ ๋ก ๋๋๊ณ , ํด๋ฅผ ๊ตฌํ ๋ค ์ฌ๊ท์ ์ธ ๋ฐฉ์์ผ๋ก ์ ์ฒด ๋ฌธ์ ์ ํด๋ต์ ๊ตฌํ๋ ๋ฐฉ์
- ์๊ณ ๋ฆฌ์ฆ์ ์งํ์ ๋ฐ๋ผ ํ์ํด์ผ ํ ๋ฒ์๋ฅผ ๋์ ์ผ๋ก ๊ฒฐ์ ํ๋ค!
- ํผ๋ณด๋์น ์์ด, Knapsack Problem ๋ฑ์ด ์ ์ฉ๋ ์ ์๋ค.
์์ ์ฝ๋
def solution(N, number):
s = [set() for x in range(8)] #set์ผ๋ก ๋ง๋ค์ด ์ค๋ณต ์ ๊ฑฐ ๊ฐ๋ฅ
#์ฃผ์ : 0๋ถํฐ ์์ํ์ง๋ง, s[0]์๋ N์ ํ๋ฒ ์ฌ์ฉํ ์งํฉ์ด ๋ ๊ฒ์.
for i, x in enumerate(s, start = 1): # ๋จผ์ N, NN, NNN... ๊ณผ ๊ฐ์ ๋ฌธ์์ด ๋ฃ์ด๋๊ธฐ
x.add(int(str(N) * i))
for i in range(len(s)):
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]:
answer = i + 1
break
else:
answer = -1
return answer
N์ ์ฌ์น์ฐ์ฐ(๊ดํธ ํฌํจ)๋ง์ ์ฌ์ฉํด์ number๋ฅผ ํํํ ์ ์๋ ๋ฐฉ๋ฒ ์ค ์ต์๊ฐ์ ๊ตฌํด์ผํ๋ค.
ex) N = 5, number = 12 \\ 12 = (55 + 5) / 5 โก answer = 4
๋ฌธ์ ๋ ๊ฐ๋จํ์ง๋ง, ๊ทธ ๊ฒฝ์ฐ์ ์๊ฐ ๋งค์ฐ ๋ง์ ๋ณต์กํ ์ฐ์ฐ์ด ํ์ํ์๋ค.
ํ์ง๋ง ๋์ ๊ณํ๋ฒ์ ์ด์ฉํ๋ฉด, ์ฝ๋๋ก๋ ๋น๊ต์ ๊ฐ๋จํ ๊ตฌํ ๊ฐ๋ฅํ๋ค.(์ฐ์ฐ๋ ํจ์ฌ ํจ์จ์ ์ด๋ค)
s[i]์ ์ ์ ํ๋ ์ฐ์ฐ๋ค( i+1๊ฐ์ N์ผ๋ก ๋ง๋ค ์ ์๋ ์ซ์ ์งํฉ)์ ์ ์ฅํ๋ค๊ฐ ๋ค์ ์ฐ์ฐ์๋ ํ์ฉํจ์ผ๋ก์จ ํจ์จ์ ์ธ ์ฐ์ฐ์ ํ ์ ์๊ฒ ๋๋ค!
๐ค ๊ณต๋ถํ๋ฉด์ ์ด๋ ค์ ๋ ๋ด์ฉ
์ฌ์ํ๊ฒ ์ฐฉ๊ฐํ๋ ๋ถ๋ถ์ด ๊ฑธ๋ฆผ๋์ด ๋์ด ์ดํดํ๋๋ฐ ๋ง์ ์๊ฐ์ ํ ์ ํ์๋ค..๐ฅ
๊ทธ๋๋ ์ดํดํ๊ณ ๋ณด๋ ๋์ค์ ๊ผญ ํ์ํ ์๊ณ ๋ฆฌ์ฆ๋ค์ด๋ผ๋ ๊ฒ ๋ชธ์ผ๋ก ๋๊ปด์ก๋ค..
์ด์ฌํ ๋ฐฐ์ ์ผ๋ ๋์ค์ ์์์ ํ์ฉํ ์ค ์์์ผ ํ ํ ๋ฐ..๐
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL]KDT_20230418 (1) | 2023.04.18 |
---|---|
[TIL]KDT_20230417 (0) | 2023.04.17 |
[TIL] KDT_20230413 (0) | 2023.04.13 |
[TIL] KDT_20230412 (0) | 2023.04.12 |
[TIL] KDT_20230411 (0) | 2023.04.11 |