JUST DO IT!

[TIL] KDT_20230411 ๋ณธ๋ฌธ

TIL

[TIL] KDT_20230411

sunhokimDev 2023. 4. 11. 17:05

๐Ÿ“š KDT WEEK 2 DAY 2 TIL

  1. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(Linked List)
  2. ์Šคํƒ(Stack)
  3. ํ›„์œ„ ํ‘œ๊ธฐ ์ˆ˜์‹

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์žฅ๋‹จ์ 

  • ์›์†Œ์˜ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ์„ ํ˜• ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ๋ณด๋‹ค ์‰ฝ๋‹ค.
  • ์„ ํ˜• ๋ฐฐ์—ด์˜ ๊ตฌ์กฐ๋ณด๋‹ค ๊ตฌ์กฐ ํ‘œํ˜„์— ์†Œ์š”๋˜๋Š” ์ €์žฅ ๊ณต๊ฐ„์˜ ์†Œ์š”๊ฐ€ ํฌ๋‹ค.
  • ํŠน์ • ์›์†Œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ ์„ ํ˜• ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค. O(n)

 

์ด๋•Œ, head๋Š” dummy node๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค

 


 

์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (Doubly Linked Lists)์˜ ํŠน์ง•

  • head์™€ tail์— ๊ฐ๊ฐ dummy node๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ€์ง„๋‹ค.
  • ๋‹น์—ฐํžˆ ์ผ๋ฐ˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋Š˜์–ด๋‚œ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋” ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅธ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Doubly Linked Lists์˜ ์‚ฝ์ž… ์˜ˆ์‹œ

 


 

์Šคํƒ(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