프론트 개발자를 위한 여정

모든 영역을 안내하는 개발자

Algorithm/코테준비

[DFS 문제 LV1] 숫자 삼각형 탐색 문제/코드

ji-frontdev 2025. 3. 18. 13:56
728x90
반응형

난이도 1 - 기본 탐색 (예상 소요 시간: 5~10분)

🔹 문제: 숫자 삼각형 탐색

 

n개의 줄로 이루어진 숫자 삼각형이 주어진다. 가장 위에서 시작해서 아래로 이동하며 합이 최대가 되는 경로를 찾으시오.
단, 한 번에 아래층의 바로 아래나 오른쪽 아래로만 이동할 수 있다.

 

입력 예시:

3
7
3 8
8 1 0
 
 

출력 예시:

 
최대 합: 18 (783)

 

문제 설명

숫자로 이루어진 삼각형이 주어졌을 때, 위에서 아래로 이동하면서 얻을 수 있는 최대 합을 구하는 문제.
단, 이동할 때는 바로 아래 또는 오른쪽 아래로만 갈 수 있어.

 

입력 예제 2

 
4
4
2 3
3 6 1
8 2 7 4

출력 예제 2

 
최대 합: 18 (4367)

경로 설명

  1. 4 (첫 번째 줄)
  2. 3 (두 번째 줄, 선택 가능: 2, 3 → 더 큰 값인 3 선택)
  3. 6 (세 번째 줄, 선택 가능: 3, 6 → 더 큰 값인 6 선택)
  4. 7 (네 번째 줄, 선택 가능: 8, 2, 7 → 더 큰 값인 7 선택)

이렇게 이동하면 4 → 3 → 6 → 7 = 18이 되고, 최대 합이 된다. 🚀

 

🔹 코드

function solution(n, arr) {
let maximum = 0;
function dfs(x, y, sum) {
// 현재 위치의 값 더하기
sum += arr[y][x];
// 마지막 줄에 도달하면 최대값 갱신 후 종료
if (y === arr.length - 1) {
maximum = Math.max(maximum, sum);
return;
}
// 아래쪽 이동 (가능한 경우)
if (y + 1 < arr.length) {
dfs(x, y + 1, sum);
}
// 오른쪽 아래 이동 (가능한 경우)
if (x + 1 < arr[y + 1].length) {
dfs(x + 1, y + 1, sum);
}
}
dfs(0, 0, 0);
return maximum;
}
// 테스트
console.log(solution(3, [[7], [3, 8], [8, 1, 0]])); // 출력: 18
728x90
반응형