국문과 유목민

1. 크레인 인형뽑기 게임 본문

알고리즘_코딩테스트/프로그래머스_Level1

1. 크레인 인형뽑기 게임

논곰 2020. 9. 9. 15:10

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. 알고리즘 계획

  1. 크레인에서 해당 값을 뽑아냄
  2. basket에 넣음
  3. basket내에서 for문으로 같은 값이 있는지 찾아내서 색출 후 count 추가
  4. 발견 시 다시 한번 두 값을 제거 후 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
Comments