문제설명
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
댓글