jiho_bae
Go devlog
jiho_bae
전체 방문자
오늘
어제
  • 분류 전체보기 (158)
    • JavaScript (38)
      • theory (34)
      • vanilla (4)
    • HTML & CSS (2)
    • Browser (3)
    • CS (6)
      • linux (1)
      • shell (2)
      • compiler (2)
    • DS & Algorithm (87)
      • theory (5)
      • basic (7)
      • programmers (30)
      • baekjoon (45)
    • Design Pattern (2)
    • Error (4)
    • Git & Github (4)
    • Tools (1)
    • 부트캠프 (4)
    • Small Tips (2)
    • Java (3)
    • test (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트 채팅방 스크롤
  • 자바스크립트 모듈 시스템
  • 카카오 코딩테스트 양궁대회 nodeJS
  • 백준 17406 nodeJS
  • 리코쳇 로봇 javascript
  • fetch 취소하기
  • 외벽 점검 javascript
  • 가사 검색 자바스크립트
  • JavaScript
  • 자바스크립트 비동기 마이크로 태스크 큐와 렌더링 과정
  • 백준 자바스크립트 입력 템플릿
  • 프로그래머스 숫자카드나누기 javascript
  • 대충만든자판 javascript
  • 억억단을 외우자 javascript
  • 리액트 프로젝트 디버깅하기
  • safari invalid date error
  • 13460 javascript nodejs
  • 계수정렬 자바스크립트
  • 퀵정렬 자바스크립트
  • 자바스크립트 sort는 왜 그모양일까
  • 자바스크립트 이벤트 위임
  • javascript use strict
  • 자바스크립트 배열의 특수함
  • 깃 이전 커밋에서 새 브랜치 만들기
  • 덧칠하기 javascript
  • 1753 최단경로 javascript
  • 25632 소수 부르기 게임
  • safari Date format NaN
  • 자바스크립트 커링
  • 병합정렬 자바스크립트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae
DS & Algorithm/baekjoon

[백준] 1932번 정수삼각형 - JavaScript(NodeJS)

DS & Algorithm/baekjoon

[백준] 1932번 정수삼각형 - JavaScript(NodeJS)

2021. 5. 17. 19:25

문제

 

1932번: 정수 삼각형

첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.

www.acmicpc.net

 

풀이

        7
      3   8
    8   1   0
  2   7   4   4
4   5   2   6   5

다음 삼각형에서 꼭대기에서 아래로 내려오면서, 대각선으로 이동한다.

 

선택한 수의 합이 최대일 때를 구하면 된다.

삼각형의 크기 N은 (1 <= N <= 500)의 범위를 가진다.

 

dp라는 배열을 기준으로 생각해서, dp[0]을 맨 위층, dp[1]을 그 다음층(위에서 두번째 층) ... 이라고 생각한다.

각 층 dp[i]마다 배열을 가지는데, 그 배열의 인덱스는 그 층의 특정 인덱스에 도달하기까지 선택한 수의 합의 최대값이다.

즉, dp[1][1]의 값은 위에서 두번째 층인 8에 도달할 때 까지 선택한 수의 최대값인 7+8=15를 가진다.

 

N=1일 때, dp[0] = [7] 이다.
N=2일 때, dp[1] = [7+3, 7+8] 이다.
N=3일 때, dp[2] = [7+3+8, Min(7+3+1, 7+8+1), 7+8+0] 이다.

 

 

일반화해보면,

 

dp[N-1][0]의 값은 0->0->0->0 인덱스를 거쳐가므로 1개의 경우의 수만 존재한다.
dp[N-1][N-1]의 값은 0->1->2->3...의 각 행의 마지막 인덱스를 거쳐가므로 1개의 경우의 수만 존재한다.
dp[N-1][K]의 값은 K를 도착한 모든 경우의 수 중 가장 큰 값을 구하면 된다.

 

K 인덱스 위치에 도착할 수 있는 방법은
이전 층(N-2 층)의 K-1 인덱스에서 오거나, K 인덱스에서 오는 방법 2가지이다.

 

 

이 두개의 숫자중에 큰 숫자를

이를 코드로 나타내본다.

 

코드

const sol = ([n, ...arr]) => {
  n = +n;
  const dp = [];
  for (let i = 0; i < n; i++) {
    dp.push(arr[i].split(" ").map((v) => +v));
  }

  for (let i = 1; i < n; i++) {
    for (let j = 0; j <= i; j++) {
      let prev;
      if (j === 0) prev = dp[i - 1][j];
      else if (j === i) prev = dp[i - 1][j - 1];
      else prev = Math.max(dp[i - 1][j - 1], dp[i - 1][j]);
      dp[i][j] += prev;
    }
  }
  console.log(Math.max(...dp[n - 1]));
};

const input = [];
require("readline")
  .createInterface(process.stdin, process.stdout)
  .on("line", (line) => {
    input.push(line);
  })
  .on("close", () => {
    sol(input);
    process.exit();
  });
저작자표시 (새창열림)

'DS & Algorithm > baekjoon' 카테고리의 다른 글

[백준] 2178번 미로 -JavaScript(NodeJS)  (0) 2021.05.28
[백준] 13023번 ABCDE - JavaScript(NodeJS)  (0) 2021.05.27
[백준] 1309번 동물원 - JavasScript(NodeJS)  (0) 2021.05.16
[백준] 1406번 에디터 - JavaScript(NodeJS)  (2) 2021.05.02
[백준] 9093번 단어 뒤집기 - JavaScript(NodeJS)  (0) 2021.05.01
  • 문제
  •  
  • 풀이
  •  
  • 코드
'DS & Algorithm/baekjoon' 카테고리의 다른 글
  • [백준] 2178번 미로 -JavaScript(NodeJS)
  • [백준] 13023번 ABCDE - JavaScript(NodeJS)
  • [백준] 1309번 동물원 - JavasScript(NodeJS)
  • [백준] 1406번 에디터 - JavaScript(NodeJS)
jiho_bae
jiho_bae
하루에 한 걸음씩

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.