문제 링크
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이 과정
- 핵심은 입력된 배열을 열 별로 0부터 차례대로 훑다가 0을 제외한 수를 만나면 뽑기.
- 뽑은 자리에는 인형이 없으므로 0으로 변환
- 인형을 차례대로 뽑은 주머니는 스택 형태로 구현.
- 스택에 가장 최상단 값과 현재 값이 같다면 pop 하고 인형 수 count
- top 값과 현재 값이 다르다면 새 인형 append
# 예제 입력
board = [[0, 0, 0, 0, 0],
[0, 0, 1, 0, 3],
[0, 2, 5, 0, 1],
[4, 2, 4, 4, 2],
[3, 5, 1, 3, 1]]
moves = [1, 5, 3, 5, 1, 2, 1, 4]
def solution(board, moves):
stk = []
count = 0
for move in moves:
# 각 열의 상단부터 열을 기준으로 훑기.
for i in range(len(board[0])):
# 처음 0 이 아닌 값이 나오면
if board[i][move - 1] != 0:
picked = board[i][move - 1]
board[i][move - 1] = 0
# stack에 있는 값과 비교했을 때 같으면
if stk and stk[-1] == picked:
stk.pop()
count += 2
# 같지 않으면 추가만 해주기.
else:
stk.append(picked)
# 인형을 뽑았으니 다음 move로 이동
break
return count
print(solution(board, moves))
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Python] 42587 - 프로세스 (0) | 2024.07.10 |
---|---|
[프로그래머스][Python] 12909 - 올바른 괄호 (0) | 2024.07.05 |
[프로그래머스][Python] 12906 - 같은 숫자는 싫어 (0) | 2024.07.03 |