KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (517) N
    • Project (1)
      • blog (1)
    • CS (1)
    • Web (29)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • Next.js (5)
      • ETC (1)
    • Docker (14)
    • Git (5)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • PS (441) N
      • 백준 (187)
      • Programmers (114) N
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • Level 0
  • LeetCode
  • Level1
  • Level 1
  • 백준
  • 정렬
  • 문자열
  • tree
  • 수학
  • 그래프
  • recursion
  • js
  • C++
  • Level 2
  • codeup
  • string
  • 제코베 JS 100제
  • 다이나믹 프로그래밍
  • programmers
  • C

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun

Coding Note

PS/Programmers

Programmers / Level 3 / 정수 삼각형 / JS

2025. 9. 10. 23:32

https://school.programmers.co.kr/learn/courses/30/lessons/43105

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이

function solution(triangle) {
  const height = triangle.length;
  const dp = Array.from({ length: height }, (_, i) => Array(i + 1));
  dp[0][0] = triangle[0][0];

  for (let i = 1; i < height; i++) {
    for (let j = 0; j < triangle[i].length; j++) {
      dp[i][j] =
        Math.max(dp[i - 1][j - 1] ?? 0, dp[i - 1][j] ?? 0) + triangle[i][j];
    }
  }

  return Math.max(...dp[height - 1]);
}

문제 자체는 간단하다.

주어진 triangle 배열과 똑같은 형태의 배열을 선언해주고 dp로 풀었다.

dp로 이전 행의 좌, 우를 비교해서 더 큰 값에 현재 위치의 값을 더해주면 된다.

 

여기서, 각 행의 가장 왼쪽과 오른쪽에 있는 값들은 각각 이전 행의 왼쪽과 오른쪽은 범위를 벗어나게 된다.

따라서 범위를 벗어나게 될 경우의 처리가 중요하다.

 

여기서 '널 병합 연산자(??)'를 사용하였다.

'널 병합 연산자'는 왼쪽 피연산자가 `null`또는 `undefined`일 때 오른쪽 피연산자를 반환하고,

그렇지 않으면 왼쪽 피연산자를 반환하는 논리 연산자이다.

 

배열의 범위를 벗어난 인덱스를 참조할 경우, `undefined`가 나온다.

따라서 널 병합 연산자를 통해서 그럴 경우엔 0으로 임시 값을 주는 것이다.

(삼각형 주변에 0 padding을 둘러싼 효과라고 생각하면 편할 것 같다.)

 

물론 falsy 값을 잡아내는 그냥 `or(||)`연산자를 사용해도 되지만,

이 문제에서는 정확히 `undefined`의 값만 판별하면 되므로 '??'를 사용하였다.

저작자표시 (새창열림)

'PS > Programmers' 카테고리의 다른 글

Programmers / Level 3 / 단속카메라 / JS  (0) 2025.09.12
Programmers / Level 2 / 가장 큰 수 / JS  (0) 2025.09.09
Programmers / Level 2 / 양궁대회 / JS  (0) 2025.09.08
Programmers / Level 2 / 전력망을 둘로 나누기 / JS  (0) 2025.09.05
    'PS/Programmers' 카테고리의 다른 글
    • Programmers / Level 3 / 단속카메라 / JS
    • Programmers / Level 2 / 가장 큰 수 / JS
    • Programmers / Level 2 / 양궁대회 / JS
    • Programmers / Level 2 / 전력망을 둘로 나누기 / JS
    KimMinJun
    KimMinJun

    티스토리툴바