0. 문제
링크: https://programmers.co.kr/learn/courses/30/lessons/64061
코딩테스트 연습 - 크레인 인형뽑기 게임
[[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]] [1,5,3,5,1,2,1,4] 4
programmers.co.kr
1. 알고리즘 계획
- 크레인에서 해당 값을 뽑아냄
- basket에 넣음
- basket내에서 for문으로 같은 값이 있는지 찾아내서 색출 후 count 추가
- 발견 시 다시 한번 두 값을 제거 후 for문 진행
2. 나의 코드
def solution(board, moves):
basket = []
for i in moves:
for j in range(len(board)):
if board[j][i-1] != 0:
basket.append(board[j][i-1])
board[j][i-1] = 0
break
return remove(basket, 0)
# 재귀함수 사용
def remove(basket, count):
for i, v in enumerate(basket):
if [v] == basket[i+1:i+2]:
del basket[i:i+2]
count += 2
count = remove(basket, count)
return count
- 재귀를 사용해서 풀었으나 썩 만족스럽지는 못한 코드
3. 다른 사람의 코드
def solution2(board, moves):
stack = []
answer = 0
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(-1)
stack.pop(-1)
answer += 2
break
return answer
- stacklist를 사용해서 문제를 풀었음. 문제가 의도하는 바와 더 흡사한 느낌.
4. 정리 및 리뷰
- 처음에 내가 생각한 알고리즘과 재귀적 방법을 사용한 것에는 만족스러웠으나, 값을 한 번에 받아서 (basket) 사용한 것이었기에 원래 문제가 의도하는 바와는 약간 다른 점이 있다고 생각.
- 다른 사람의 풀이에서 stack을 사용한 풀이가 더 정확한 느낌이었다고 생각한다.
코드 만족도: ★★★☆☆
'알고리즘_코딩테스트 > 프로그래머스_Level1' 카테고리의 다른 글
| 6. 2016년 (0) | 2020.09.09 |
|---|---|
| 5. K번째 수 (0) | 2020.09.09 |
| 4. 체육복 (0) | 2020.09.09 |
| 3. 모의고사 (0) | 2020.09.09 |
| 2. 완주하지 못한 선수 (0) | 2020.09.09 |