https://school.programmers.co.kr/learn/courses/30/lessons/64061
1. 내가 작성한 코드
def solution(board, moves):
cnt = 0 #사라진 인형의 개수
stack = [] #바구니
for k in moves:
for i in range(0,len(board)):
if board[i][k-1] != 0:
stack.append(board[i].pop(k-1))
board[i].insert(k-1,0)
break
if len(stack) >= 2:
if stack[-1] == stack[-2]:
stack.pop()
stack.pop()
cnt+=2
return cnt
stack 의 성질을 이용해 풀었다.
1. moves에서 꺼내온 원소를 "열"에 넣고, 행을 0부터 반복하며 인형이 있을 경우 stack에 append 해준다.
(참고로 게임 화면은 1부터, list의 index는 0부터 시작하기 때문에 k-1을 해주었다.)
ex) moves의 원소가 1일 경우 : [0][1] => [1][1] => [2][1] ...
2. stack의 원소가 2개 이상 쌓였을 경우, 제일 끝 value와 그 앞의 value가 같으면 둘 다 제거해주고
cnt+=2를 해준다(2개의 인형이 동시에 사라지기 때문에).
2. 수정한 코드
def solution(board, moves):
cnt = 0 #사라진 인형의 개수
stack = []
for k in moves:
for i in range(0,len(board)):
if board[i][k-1] != 0:
stack.append(board[i][k-1]) #수정
board[i][k-1] = 0 #수정
break
if len(stack) >= 2:
if stack[-1] == stack[-2]:
stack.pop()
stack.pop()
cnt+=2
return cnt
pop, insert를 이용하지 않고 문제를 풀면 더 효율적인 코드가 완성된다.
'🔅코딩테스트 공부🔅 > ❗프로그래머스(Lv.1)' 카테고리의 다른 글
[프로그래머스] Level1 햄버거 만들기(python) (0) | 2023.02.15 |
---|---|
[프로그래머스] Level1 숫자 짝꿍(python) (0) | 2023.02.14 |
[프로그래머스] Level1 로또의 최고 순위와 최저 순위(python) (0) | 2023.02.13 |
[프로그래머스] Level1 숫자 문자열과 영단어(python) (0) | 2023.02.13 |
[프로그래머스] Level1 문자열 나누기(python) (0) | 2023.02.13 |
댓글