๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ‘œ ํŽธ์ง‘ (Python)

1. ๋ฌธ์ œ ์„ค๋ช…

๋ฌธ์ œ ๋งํฌ

  • ์ž…๋ ฅ
    • n : ์ฒ˜์Œ ํ‘œ์˜ ํ–‰ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜
    • k : ์ฒ˜์Œ์— ์„ ํƒ๋œ ํ–‰์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜
  • ์ถœ๋ ฅ
    • ์ˆ˜ํ–‰ํ•œ ๋ช…๋ น์–ด๋“ค์ด ๋‹ด๊ธด ๋ฌธ์ž์—ด ๋ฐฐ์—ด cmd๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„ ํ‘œ์˜ ์ƒํƒœ์™€ ์ฒ˜์Œ ์ฃผ์–ด์ง„ ํ‘œ์˜ ์ƒํƒœ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์‚ญ์ œ๋˜์ง€ ์•Š์€ ํ–‰์€ O, ์‚ญ์ œ๋œ ํ–‰์€ X๋กœ ํ‘œ์‹œํ•˜์—ฌ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ return

2. ์ฝ”๋“œ

solution1.py

class Node:
    def __init__(self):
        self.removed = False
        self.prev = None
        self.next = None

def solution(n, k, cmd):
    nodeArr = [Node() for _ in range(n)]
    for i in range(1, n):
        nodeArr[i-1].next = nodeArr[i]
        nodeArr[i].prev = nodeArr[i-1]

    curr = nodeArr[k]
    mystack = []

    for str in cmd:
        if str[0] == 'U':
            x = int(str[2:])
            for _ in range(x):
                curr = curr.prev
        elif str[0] == 'D':
            x = int(str[2:])
            for _ in range(x):
                curr = curr.next
        elif str[0] == 'C':
            mystack.append(curr)
            curr.removed = True
            up = curr.prev
            down = curr.next
            if up:
                up.next = down #์—ฐ๊ฒฐ
            if down:
                down.prev = up#์—ฐ๊ฒฐ
                curr = down
            else:#๋งˆ์ง€๋ง‰ ๊ฐ’์ด๋ฉด
                curr = up
        else: #Z
            node = mystack.pop()
            node.removed = False
            up = node.prev
            down = node.next
            if up:
                up.next = node
            if down:
                down.prev = node


    answer = ''
    for i in range(n):
        if nodeArr[i].removed: #True
            answer+='X'
        else:
            answer+='O'
    return answer

3. ํšŒ๊ณ 

  • ์ฒ˜์Œ์—๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ’€๋ ค๊ณ  ํ•˜๋‹ค๋ณด๋‹ˆ ๊ณ„์† ๋ง‰ํ˜”๋‹ค.
  • ํ’€์ด๋ฅผ ๋ณด๋‹ˆ, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•ด ํ’€์—ˆ๋‹ค.
  • class๋กœ Node ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•ด์„œ ์ „ํ›„์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๊ณ , ์‚ญ์ œํ•œ ํ›„ ํ˜„์žฌ ์œ„์น˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ํŽธํ–ˆ๋‹ค.
    • ์‚ญ์ œ ํ›„์—๋Š” ํ˜„์žฌ ์œ„์น˜๊ฐ€ ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋Š”๋ฐ, ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ์‚ญ์ œ๋  ๋•Œ๋Š” ํ˜„์žฌ์œ„์น˜๋ฅผ ์œ„๋กœ ์˜ฌ๋ ค์•ผํ•œ๋‹ค.
  • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ํŒŒ์ด์ฌ์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๊ณ  ์žฌ๋ฏธ์žˆ์—ˆ๋‹ค.
  • ๋‹ค์Œ ๋ฒˆ์—๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„์—ฐ์Šต์„ ํ•ด์•ผ๊ฒ ๋‹ค.

4. ์ฐธ๊ณ 

https://www.youtube.com/watch?v=A-KfaMVBfhg