본문 바로가기

코딩테스트

[프로그래머스] level2. 땅따먹기 (javascirpt)

반응형

문제

땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟으면서 내려와야 합니다. 단, 땅따먹기 게임에는 한 행씩 내려올 때, 같은 열을 연속해서 밟을 수 없는 특수 규칙이 있습니다.

예를 들면,

| 1 | 2 | 3 | 5 |

| 5 | 6 | 7 | 8 |

| 4 | 3 | 2 | 1 |

로 땅이 주어졌다면, 1행에서 네번째 칸 (5)를 밟았으면, 2행의 네번째 칸 (8)은 밟을 수 없습니다.

마지막 행까지 모두 내려왔을 때, 얻을 수 있는 점수의 최대값을 return하는 solution 함수를 완성해 주세요. 위 예의 경우, 1행의 네번째 칸 (5), 2행의 세번째 칸 (7), 3행의 첫번째 칸 (4) 땅을 밟아 16점이 최고점이 되므로 16을 return 하면 됩니다.

나의 풀이

초기 코드(오답)

function findmax(arr){

}

function solution(land) {
    var answer = 0;
    const x = land[0].length;
    const y = land.length;

    for(let i =0 , cnt =0 ; i < y; i++){

        let firstmax1 = Math.max(...land[i])
        let firstmax2 = Math.max(...land[i+1])
        let index1 = land[i].indexOf(firstmax1)
        let index2 = land[i+1].indexOf(firstmax2)

        let ans = firstmax1;
        if (index1 == index2 ){
            land[i][index1] = 0
            land[i+1][index2] = 0
            let secondmax1 = Math.max(...land[i])
            let secondmax2 = Math.max(...land[i+1])

            let a = firstmax2 + secondmax1
            let b = firstmax1 + secondmax2

            ans = a > b ? firstmax2 : firstmax1
        }
        //막힘..

    }

    return answer;
}

한번에 비교군 2개를 계산해서 전부 비교를 해볼라 했는데, index범위나, 처리 방법에서 막혔다.

다른 이들의 풀이

function solution(land) {
    for(let i =0 ; i < land.length-1; i++){
        land[i+1] = Arraymax(land[i],land[i+1]) 
    }
    return  Math.max(...land[land.length-1])

}

function Arraymax(arr1,arr2){
    let tmp = []
    let fin = [0,0,0,0]
    let val = 0;

    for(let i =0 ; i < arr2.length; i++){
        for(let j =0 ; j < arr1.length; j++){
            if(i == j ){
                continue
            } else{
                val = arr1[j] + arr2[i]
                tmp.push(val)
            }
        }
        fin[i] = (Math.max(...tmp))
        tmp =[]
    }
    return fin
}

문제 해설 : 프로그래머스
동적 프로그래밍 이라는 알고리즘이다.
내가 적은 답 외에도 다양한 방법이 존재한다. 나도 여러 블로그를 참조했으니, 검색해보고 입맛에 맞는걸 사용하면 될 것 같다.

참조

동적 프로그래밍 참조 : 블로그
봐도 뒤돌아서면 기억이 안난다...ㅎ...
자주 자주 보면서 익숙해지자!

반응형