๋ฌธ์ ๋งํฌ: https://programmers.co.kr/learn/courses/30/lessons/64061
๋ฌธ์ ์ค๋ช
board์ moves์ ์ ๋ณด๋ก ํฌ๋ ์ธ ์๋์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค. ์ด๋ ๋ฐ๊ตฌ๋๋ stack์ผ๋ก ๊ตฌํํ์ฌ ๋ง์ฝ ํ์ฌ ๋ฝ์ ์ธํ์ด stack top์ ์ธํ๊ณผ ๊ฐ์ ์ข ๋ฅ๋ผ๋ฉด ์ธํ์ ์์ ์ผ ํฉ๋๋ค.
- doll์ ํ์ฌ ํฌ๋ ์ธ ์๋์ ๋ฝํ ์ธํ์ ๋ฒํธ๋ฅผ ์ ์ฅํฉ๋๋ค.
- ๋ง์ฝ doll == 0์ด๋ฉด ๋ฝํ ์ธํ์ด ์์ผ๋ฏ๋ก ๋ค์ ํฌ๋ ์ธ ์๋์ผ๋ก ๋์ด๊ฐ๋๋ค.
- doll์ด ๋ฐ๊ตฌ๋์ ์ ์ผ ์์ ์๋ ์ธํ(stack top)๊ณผ ๊ฐ์ ์ข ๋ฅ๋ผ๋ฉด doll์ ๋ฐ๊ตฌ๋์ ๋ฃ์ง์๊ณ , stack top๋ pop ํฉ๋๋ค.
- ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ doll์ ๋ฐ๊ตฌ๋์ pushํฉ๋๋ค.
- moves์ ๋ชจ๋ ์์์ ๋ํด 1~4๋ฅผ ๋ฐ๋ณต ์ํํ๋ฉฐ ์ฌ๋ผ์ง ์ธํ์ ๊ฐ์๋ฅผ ์ ๋๋ค.
์์ค์ฝ๋
def solution(board, moves):
answer = 0
stack = [] # ๋ฐ๊ตฌ๋
for move in moves:
doll = 0
# ํ์ฌ ํฌ๋ ์ธ ์๋์ ๋ฝํ ์ธํ์ ๋ฒํธ ๊ตฌํ๊ธฐ
for i in range(len(board)):
if board[i][move-1] != 0:
doll = board[i][move-1]
board[i][move-1] = 0
break
if doll == 0: continue # ๋ฝํ ์ธํ์ด ์๋ค๋ฉด ๋ค์ ํฌ๋ ์ธ ์๋์ผ๋ก ๋์ด๊ฐ
if stack and stack[-1] == doll: # ๋ฐ๊ตฌ๋์ ๊ฐ์ ์ธํ์ด ์ฐ์ํด์ ์์ผ ๊ฒฝ์ฐ
answer += 2
stack.pop()
else:
stack.append(doll)
return answer
728x90