본문 바로가기
Python/알고리즘

[COS PRO 1급 #6-5] 코인을 많이 획득하세요

by 포푸리 (POPOOLY) 2023. 3. 9.
반응형

문제설명

A 게임은 4x4 격자 모양의 보드의 가장 왼쪽 위에서 가장 오른쪽 아래로 말을 이동시키면서 각 구역에 있는 코인을 획득하는 게임입니다. 이때, 말은 오른쪽 또는 아래쪽으로만 이동할 수 있습니다.

예를 들어, 보드가 아래와 같다면

아래의 경우가 코인을 최대로 획득할 수 있는 경우이고 이때 획득하는 코인은 38입니다.

 

각 구역에서 획득할 수 있는 코인 양을 담은 2차원 리스트 board가 매개변수로 주어질 때, 최대로 획득할 수 있는 코인의 양을 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 _**한 줄**_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

매개변수 설명

각 구역에서 획득할 수 있는 코인 양을 담은 2차원 리스트 board가 solution 함수의 매개변수로 주어집니다.

* board는 4x4 크기인 2차원 리스트입니다.
* 각 구역에서 획득할 수 있는 코인의 양은 1 이상 9 이하인 자연수입니다.

return 값 설명

최대로 획득할 수 있는 코인의 양을 return 합니다.

예시

| board                                                 | return |
|----------------------------------------------------------|--------|
| [[6, 7, 1, 2], [3, 5, 3, 9], [6, 4, 5, 2], [7, 3, 2, 6]] | 38  |

예시 설명

문제에 나온 예와 같습니다.

문제 코드

def solution(board):
    coins = [[0 for c in range(4)] for r in range(4)]
    for i in range(4):
        for j in range(4):
            if i == 0 and j == 0:
                coins[i][j] = board[i][j]
            elif i == 0 and j != 0:
                coins[i][j] = board[i][j] + coins[i][j-1]
            elif i != 0 and j == 0:
                coins[i][j] = board[i][j] + coins[i-1][j]
            else:
                coins[i][j] = board[i][j] + max(coins[i][j], coins[i-1][j-1])
    answer = coins[3][3]
    return answer

풀이

def solution(board):
    coins = [[0 for c in range(4)] for r in range(4)]
    for i in range(4):
        for j in range(4):
        
        	# (0,0) 좌표에서는 (0,0)의 코인 획득
            if i == 0 and j == 0:
                coins[i][j] = board[i][j]
            # 첫째행의 좌표에서는 왼쪽 코인과 해당 좌표의 코인 획득
            elif i == 0 and j != 0:
                coins[i][j] = board[i][j] + coins[i][j-1]
            # 첫째열의 좌표에서는 위쪽 코인과 해당 좌표의 코인 획득
            elif i != 0 and j == 0:
                coins[i][j] = board[i][j] + coins[i-1][j]
            # 기타 좌표에서는 왼쪽 코인과 위쪽 코인 중 큰 코인과 해당 좌표의 코인 획득
            else:
                coins[i][j] = board[i][j] + max(coins[i][j-1], coins[i-1][j])
    answer = coins[3][3]
    return answer

댓글