난이도: Lv. 2
정답률: 58%
문제: https://school.programmers.co.kr/learn/courses/30/lessons/12913
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
알고리즘
1. 생성된 2차원 배열에서 열별 최댓값을 추출하여 1차원 배열을 생성한다.
2. 생성한 1차원 배열과 다음 행에 대해 1.의 과정을 수행한다. 모든 행에 대해 수행했다면 마지막 1차원 배열에서의 최댓값이 이 문제의 정답이 된다. 참고로 1차원 배열에는 각 행의 각 열까지 오는 경로 중 최댓값만 담기게 된다.
코드
function solution(land) {
const col = 4;
let level = 0;
let currArr = [...land[0]];
const D = Array.from({ length: 4 }, () => Array.from({ length: 4 }, () => 0));
while (level < land.length - 1) {
for (let i = 0; i < col; i++) {
for (let j = 0; j < col; j++) {
if (i === j) { D[i][j] = i; }
else { D[j][i] = currArr[i] + land[level + 1][j]; }
}
}
level++;
currArr = [];
for (let i = 0; i < col; i++) {
currArr.push(Math.max(...D[i]));
}
}
return Math.max(...currArr);
}
주저리
1트에는 dfs로 풀었는데 풀면서도 이거 백퍼 시간초과 난다 했는데 당연히 시간초과 났고, 2트에는 그리디로 풀었는데 다 틀려서 질문하기 염탐했는데 DP로 푸는 거라길래 한 번은 DP인척 하는 그리디로 잘못 풀어서 틀리고 두 번째에는 맞았다. DP 문제 푼 지 어언 2년 전이라 고민을 좀 오래 했다. 이 문제 푸는 데 걸린 시간은 총 1시간 정도인 것 같긴 한데 DP로 푸는 문제인 줄 몰랐다면 한참 더 걸렸을 것 같다.
'코딩테스트' 카테고리의 다른 글
[JS] 오픈채팅방 (0) | 2024.01.11 |
---|---|
[JS] 스킬트리 (0) | 2024.01.10 |
[JS] 주식 가격 (0) | 2024.01.08 |
[JS] 방문 길이 (0) | 2024.01.05 |
[JS] 뒤에 있는 큰 수 찾기 (0) | 2024.01.04 |