반응형
문제
땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(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
}
문제 해설 : 프로그래머스
동적 프로그래밍 이라는 알고리즘이다.
내가 적은 답 외에도 다양한 방법이 존재한다. 나도 여러 블로그를 참조했으니, 검색해보고 입맛에 맞는걸 사용하면 될 것 같다.
참조
동적 프로그래밍 참조 : 블로그
봐도 뒤돌아서면 기억이 안난다...ㅎ...
자주 자주 보면서 익숙해지자!
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] level2. 행렬의 곱셈 (javascript) (0) | 2021.05.03 |
---|---|
[프로그래머스] level2. 타겟 넘버 (javascript) (0) | 2021.05.03 |
[프로그래머스] level2. 올바른 괄호 (javascript) (0) | 2021.05.03 |
[프로그래머스] level2. H-Index (javascript) (0) | 2021.05.03 |
[프로그래머스] level2. 기능 개발 (javascript) (0) | 2021.05.03 |