문제 설명
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 |
예제 설명
문제에 나온 예와 같습니다.
소스 코드

문제 풀이
우선 소스 코드를 살펴보면 coin이라는 list를 새로 만들어서 진행하는 방식으로 되어있다. 처음 시작 값을 담기위해 i=0, j=0을 주었고 그 외엔 오른쪽 혹은 아래로 이동하며 전부 탐색하는 형태이다.
마지막 else에서 왼쪽 칸과 위쪽 칸 중에서 큰 값을 가져와 담아줘야 하므로 해당줄을 바꿔주면 된다.
class Solution {
public int solution(int[][] board) {
int answer = 0;
int[][] coins = new int[4][4];
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 4; j++) {
if(i == 0 && j == 0)
coins[i][j] = board[i][j];
else if(i == 0 && j != 0)
coins[i][j] = board[i][j] + coins[i][j-1];
else if(i != 0 && j == 0)
coins[i][j] = board[i][j] + coins[i-1][j];
else
coins[i][j] = board[i][j] + Math.max(coins[i-1][j], coins[i][j-1]);
}
}
answer = coins[3][3];
return answer;
}
'Algorithm > COS Pro 1급 JAVA' 카테고리의 다른 글
[COS Pro 1급 JAVA 모의고사] 숫자 뽑기(함수 작성) (0) | 2022.10.16 |
---|---|
[COS Pro 1급 JAVA 모의고사] 카드셔플(한 줄 바꾸기) (0) | 2022.10.15 |
[COS Pro 1급 JAVA 모의고사] 종이접기(한 줄 바꾸기) (1) | 2022.10.13 |
[COS Pro 1급 JAVA 모의고사] 아르바이트, 판매사원(빈칸 채우기) (0) | 2022.10.12 |
[COS Pro 1급 JAVA 모의고사] Up and down(빈칸 채우기) (0) | 2022.10.10 |