์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- Salting
- Kafka
- SQL
- DataFrame Hint
- Spark Partitioning
- off heap memory
- k8s
- KDT_TIL
- Spark ์ค์ต
- Spark
- mysql
- etl
- colab
- ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ
- disk spill
- Kubernetes
- CI/CD
- Dag
- Docker
- topic
- backfill
- AQE
- aws
- Airflow
- Spark Caching
- ๋น ๋ฐ์ดํฐ
- Spark SQL
- spark executor memory
- Speculative Execution
- redshift
- Today
- Total
JUST DO IT!
[TIL] KDT_20230411 ๋ณธ๋ฌธ
๐ KDT WEEK 2 DAY 2 TIL
- ์ฐ๊ฒฐ๋ฆฌ์คํธ(Linked List)
- ์คํ(Stack)
- ํ์ ํ๊ธฐ ์์
์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์ฅ๋จ์
- ์์์ ์ฝ์ , ์ญ์ ๊ฐ ์ ํ ๋ฐฐ์ด์ ๊ฒฝ์ฐ๋ณด๋ค ์ฝ๋ค.
- ์ ํ ๋ฐฐ์ด์ ๊ตฌ์กฐ๋ณด๋ค ๊ตฌ์กฐ ํํ์ ์์๋๋ ์ ์ฅ ๊ณต๊ฐ์ ์์๊ฐ ํฌ๋ค.
- ํน์ ์์๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ ์ ํ ๋ฐฐ์ด์ ๊ฒฝ์ฐ๋ณด๋ค ๋๋ฆฌ๋ค. O(n)
์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Doubly Linked Lists)์ ํน์ง
- head์ tail์ ๊ฐ๊ฐ dummy node๋ฅผ ํ๋์ฉ ๊ฐ์ง๋ค.
- ๋น์ฐํ ์ผ๋ฐ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋์ด๋๋ค.
- ํ์ง๋ง ๋ ํจ์จ์ ์ด๊ณ ๋น ๋ฅธ ํ์์ด ๊ฐ๋ฅํ๋ค.
์คํ(Stack)
- ํ์ ์ ์ถ(LIFO) ๋ฐฉ์์ ์๋ฃ๊ตฌ์กฐ
์์์ ํ์ ํ๊ธฐ๋ฒ(Postfix Notation)
- ๊ดํธ์์ด ์ฐ์ฐ์ ์ฐ์ ์์๋ฅผ ํํ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ผ๋ก์จ, ์ฐ์ฐ์๊ฐ ๋ค์ ํํ๋๋ค.
- ์ปดํจํฐ๊ฐ ์์์ ๊ณ์ฐํ๋ ๋ฐ์ ์ ๋ฆฌํ ๋ฐฉ๋ฒ => ์คํ ์ฌ์ฉ
์ค์ํํ์ โถ ํ์ํํ์ ์์
( A + B ) * ( C + D ) โก AB+CD+*
๐ค ๊ณต๋ถํ๋ฉด์ ์ด๋ ค์ ๋ ๋ด์ฉ
12๊ฐ ์ค์ต ๊ณผ์ ์ค, ์ค์ํํ ์์์ ํ์ํํ ์์์ผ๋ก ๋ฐ๊พธ๋ ๊ณผ์ ์์ ์กฐ๊ธ ํค๋งธ๋ค..๐ญ
์ธ๊ฐ์ง ํ ์คํธ ์ผ์ด์ค๊ฐ ํต๊ณผ๋์ง ์์๋๋ฐ, ์ค๋ฅ๋ ๋ชจ๋ฅด๊ณ ์ถ๋ ฅ๋ ๋ชจ๋ฅด๋ ์ด์ฉ์ง ํ๋ค๊ฐ..
๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒช๋ ๋๊ธฐ๋ถ์ด ์ฌ๋ฆฐ ๊ธ์์ ์ฃ์ง ์ผ์ด์ค๋ฅผ ์ถ๊ฐํ๊ณ ํด๋ต์ ์ป์๋ค..! ๐
๋ฌธ์ ์ ์ฃ์ง ์ผ์ด์ค
"A+B*C/(D*E-F)+G" โก "ABC*DE*F-/+G+"
๋ด ์ฝ๋ ๊ฒฐ๊ณผ๋ก๋ "ABC*DE*F-/G++" ๊ฐ ๋์์๋ค.
๋ฌธ์ ๋, ๋ ์ฐ์ฐ์์ด์์ด ์ฐ์์ผ๋ก ์คํ์ ๋ค์ด์๋ ์ํฉ์์ ์คํ์ ๋ค์ด๊ฐ๋ ค๋ ์ฐ์ฐ์๊ฐ ์คํ์ ๋ ์ฐ์ฐ์ ์ค ํ๋์๋ง ๋น๊ตํ๊ณ ์คํ์ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐ์์ผ๋ก ์กด์ฌํ๋ ๋ ๋ฒ์งธ ์ฐ์ฐ์๋ ์คํ์ ๋ค์ด๊ฐ๋ ค๋ ์ฐ์ฐ์๋ณด๋ค ์ด๋ฏธ ์์ ๋ค์ด๊ฐ์๋ ์ฐ์ฐ์์ด๋ฏ๋ก, ์ด ์ฐ์ฐ์์๋ ์ฐ์ ์์๋ฅผ ๋น๊ตํ๊ณ ์คํ์ ๋ค์ด๊ฐ๋ ๊ฒ์ด ๋ง๋ ๊ฒ ๊ฐ๋ค.
๋ค์์ ํจ์์ ์ธ์์์ ์ฐ์ฐ์๊ฐ ๋์์ผ๋ฏ๋ก, ์คํ๊ณผ ์ฐ์ ์์๋ฅผ ๋น๊ตํ๋ ๊ตฌ๋ฌธ์ด๋ค.
while not opStack.isEmpty() and prec[opStack.peek()] >= prec[e]: # ์ฐ์ ์์๊ฐ ๋๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ ์คํ๊ฑฐ๋ pop
result.append(opStack.pop())
opStack.push(e) # ์คํ์ ์ฐ์ ์์๊ฐ ๋ ๋ฎ๊ฑฐ๋ ๋ฎ์์ง ๊ฒฝ์ฐ e๋ฅผ ์คํ์ PUSH
์ฝ๋ ์ ๋ฌธ( ๊ฐ๋ ์ค๋ฒ๋ฆฐ ๊ฐ๋
์ฑ.. )
class ArrayStack:
def __init__(self):
self.data = []
def size(self):
return len(self.data)
def isEmpty(self):
return self.size() == 0
def push(self, item):
self.data.append(item)
def pop(self):
return self.data.pop()
def peek(self):
return self.data[-1]
prec = {
'*': 3, '/': 3,
'+': 2, '-': 2,
'(': 1
}
def solution(S):
opStack = ArrayStack()
result = []
for e in S:
if e in prec or e == ')': # ์ฐ์ฐ์์ ๊ดํธ์ผ ๊ฒฝ์ฐ
if opStack.isEmpty() or e == '(': # ์คํ์ด ๋น์๊ฑฐ๋ ์ฌ๋ ๊ดํธ์ผ ๊ฒฝ์ฐ ์คํ์ PUSH
opStack.push(e)
elif e != ')': # ์คํ์ ๋ญ๊ฐ ์์ ๊ฒฝ์ฐ ์ฐ์ ์์ ๋น๊ต
while not opStack.isEmpty() and prec[opStack.peek()] >= prec[e]: # ์ฐ์ ์์๊ฐ ๋๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ ์คํ๊ฑฐ๋ pop
result.append(opStack.pop())
opStack.push(e) # ์ฐ์ ์์๊ฐ ๋ ๋ฎ๊ฑฐ๋ ๋ฎ์์ง ๊ฒฝ์ฐ e๋ฅผ ์คํ์ PUSH
else: # ๋ซ๋ ๊ดํธ์ผ ๊ฒฝ์ฐ
while opStack.peek() != '(': # ์ฌ๋ ๊ดํธ๊ฐ ๋์ฌ ๋๊น์ง ๊ณ์ํด์ pop
if opStack.peek() != '(':
result.append(opStack.pop())
opStack.pop() # ์ฌ๋ ๊ดํธ ์ ๊ฑฐ
else: # ๋ฌธ์์ผ ๊ฒฝ์ฐ
result.append(e)
while not opStack.isEmpty(): # ๋จ์ ์คํ ํธ์ด ๋ฃ๊ธฐ
result.append(opStack.pop())
return "".join(result)
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL]KDT_20230417 (0) | 2023.04.17 |
---|---|
[TIL] KDT_20230414 (0) | 2023.04.14 |
[TIL] KDT_20230413 (0) | 2023.04.13 |
[TIL] KDT_20230412 (0) | 2023.04.12 |
[TIL] KDT_20230410 (0) | 2023.04.10 |