https://school.programmers.co.kr/learn/courses/30/lessons/64061
풀이 - 나의 생각
board의 최상단에 위치한 인형을 찾아
그 값이 stack의 이전 값과 같으면
stack에 있는 값도 pop하고 인형의 개수(+2) 추가
아니라면 stack에 저장해주고 넘어갑니다.
2019년도 카카오 인턴십에 나온 문제라는데
현재보다는 난이도가 낮은 듯 합니다.
좀 더 빠르게 풀 수 있는 방법이 뭘까 하다가
최상단에 있는 인형을 미리 조사해서 뽑아다 쓰는 방법을 해봤습니다.
속도는 거의 2배 차이 나네요.
코드
def solution(board, moves):
answer = 0
stack = []
for move in moves:
col = move - 1
for i in range(len(board)):
if board[i][col] > 0:
doll = board[i][col]
board[i][col] = 0
if stack and stack[-1] == doll:
stack.pop()
answer += 2
else:
stack.append(doll)
break
return answer
def solution(board, moves):
answer = 0
stack = []
top = [-1] * len(board)
for i, dolls in enumerate(board):
for j, doll in enumerate(dolls):
if doll > 0 and top[j] == -1:
top[j] = i
for i in moves:
doll_index = top[i-1]
if doll_index < len(board):
doll = board[doll_index][i-1]
top[i-1] = doll_index + 1
if stack and stack[-1] == doll:
stack.pop()
answer += 2
else:
stack.append(doll)
return answer
728x90
'프로그래머스 > Lv.1' 카테고리의 다른 글
월간 코드 챌린지 시즌1 > 두 개 뽑아서 더하기 - Python, combinations(조합) (0) | 2024.12.05 |
---|---|
[PCCE 기출문제] 10번 / 공원 - Pyton, 누적합(Prefix Sum) (0) | 2024.12.05 |
월간 코드 챌린지 시즌1 > 내적 - Python, zip, sum (0) | 2024.12.02 |
삼총사 - Python, combinations (0) | 2024.11.30 |
시저 암호 - Python, ord, 시저코드 (1) | 2024.11.28 |