티스토리 뷰

알고리즘

<Programmers> 땅따먹기

koyuchang 2020. 4. 28. 16:04

[내 코드]

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {

public static void main(String[] args) {
int[][] land = {{1, 2, 3, 5},
{5, 6, 7, 8},
{4, 3, 2, 1}};
int answer = 0;
int rNum = -1;
int max = 0;
for (int i = 0; i < land.length; i++) {

if (rNum == -1) {
for (int j = 0; j < 4; j++) {
if (max < land[i][j]) {
max = land[i][j];
rNum = j;
}

}
answer += max;
max = 0;
} else {

row(land, rNum);
for (int j = 0; j < 4; j++) {

if (max < land[i][j]) {
max = land[i][j];
rNum = j;
}

}
}
answer += max;
max = 0;
}

}

static void row(int[][] land, int rNum) {
for (int i = 0; i < land.length; i++) {
for (int j = 0; j < 4; j++) {
if (j == rNum) {
land[i][j] = 0;
}

}
}
}
}

 

내 코드로 작성하니 테스트 케이스만 통과하고 테스트는 전부 실패하였다. 블로그를 참고하니 DP를 이용하여 풀이하는 것이 바람직하다.

https://zzang9ha.tistory.com/38

 

프로그래머스[Java] - 땅따먹기

https://programmers.co.kr/learn/courses/30/lessons/12913 코딩테스트 연습 - 땅따먹기 | 프로그래머스 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는..

zzang9ha.tistory.com

 

[보완된 코드]

import java.util.*;

class Solution {
public static int solution(int[][] land) {

for(int i=1; i<land.length; i++) {
land[i][0] += Math.max(land[i-1][1], Math.max(land[i-1][2], land[i-1][3]));
land[i][1] += Math.max(land[i-1][0], Math.max(land[i-1][2], land[i-1][3]));
land[i][2] += Math.max(land[i-1][1], Math.max(land[i-1][0], land[i-1][3]));
land[i][3] += Math.max(land[i-1][0], Math.max(land[i-1][1], land[i-1][2]));
}
        
        for(int i=0; i<land.length; i++){
            Arrays.sort(land[i]);
        }
        return land[land.length-1][3];
    }
}

'알고리즘' 카테고리의 다른 글

<Programmers> 피보나치 수  (0) 2020.04.29
<Programmers> 최솟값 만들기  (0) 2020.04.29
<Programmers> 최댓값과 최솟값  (0) 2020.04.29
<Programmers> 숫자의 표현  (0) 2020.04.29
<Programmers> 다음 큰 숫자  (0) 2020.04.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함