종식당
[프로그래머스 lv.1] 2019 카카오 개발자 겨울 인턴십 크레인 인형뽑기 게임 본문
- 문제 설명
주어진 2차원 배열 board에서 moves에 해당하는 열의 요소의 가장 맨 위의 요소를 빼내어 새로운 배열에 추가해 준다. 새로운 배열에서 동일한 인형이 두 개가 쌓이게 되면 이 두 인형을 제거해 준다. 새로운 배열에서 제거된 인형의 총개수를 반환해 주면 된다. board에서 동일한 숫자가 동일한 인형이라고 생각하면 되고 새로운 배열에서 두 개의 연속된 숫자가 있으면 제거해 주면 된다.
이 문제를 처음 봤을 때 stack을 사용해야 될 것 같은데 stack을 어떤 방식으로 사용해야 할 지 감이 안 왔다.
이번 문제는 먼저 코드를 확인하고 이에 대해 설명을 진행하겠다.
- 제출 코드
def solution(board, moves):
answer = 0
stack = []
for i in moves:
for j in range(len(board)):
if board[j][i-1] != 0:
stack.append(board[j][i-1])
board[j][i-1] = 0
if len(stack) > 1:
if stack[-1] == stack[-2]:
stack.pop()
stack.pop()
answer+=2
break
return answer
말만 stack이지 그냥 리스트랑 동일하다고 생각하면 된다. 위 코드에서 저 for문을 잘 살펴보고 이런 형식의 for문에 대해서 익숙해져야겠다. 먼저 moves에서 for문을 돌리고 그다음으로 board의 길이만큼 for문을 돌린다.
그리고 board [j][i-1] 이런 식으로 board에 접근할 수 있다. 만약 moves에서 1이면 board에서 0번째 열이고 moves에서 3이면 board에서 두 번째 열이기 때문이다. 이때 해당 요소가 0이 아닐 때 stack에 추가해 줘요 하니 if문을 통해 stack에 추가하고 해당 요소의 자리는 0으로 만들어준다.
if문으로 내려와서 stack의 길이가 2일 때부터 이제 들어온 숫자들을 비교해 준다. 비교해서 같으면 둘 다 pop()을 통해 제거하고 answer의 값을 2씩 증가한다.
그리고 break의 위치가 중요한데 위 과정들이 모두 if board [j][i-1]!= 0: 이 조건문에 걸려있으므로 이 조건문이 걸려있는 for문에 break를 걸어줘야 한다.
이번 문제를 보고 stack을 사용해야겠다는 느낌을 가져가긴 했지만 응용을 잘 못한 것 같다. 문제를 처음 봤을 때 너무 길거나 사진이 있는 문제는 풀기 싫었는데 가리지 말고 또 쉬운 문제들만 풀지 말고 이런 문제들도 조금씩 풀어보면서 겁을 앲애고 익숙해져야겠다,,,
'프로그래머스' 카테고리의 다른 글
[프로그래머스 lv.1] 2021 Dev-Matching: 웹 백엔드 개발자(상반기) 로또의 최고 순위와 최저 순위 (0) | 2024.03.19 |
---|---|
[프로그래머스 lv.1] 2023 KAKAO BLIND RECRUITMENT 개인정보 수집 유효기간 (1) | 2024.03.19 |
[프로그래머스 lv.2] 탐욕법(Greedy) 구명보트 (4) | 2024.01.26 |
[프로그래머스 lv.1] 2021 카카오 채용연계형 인턴 숫자 문자열과 영단어 (0) | 2024.01.22 |
[프로그래머스 lv.1] 2018 kakao blind recruitment [1차] 비밀지도 (0) | 2024.01.18 |