치춘짱베리굿나이스

[백준] 11053 본문

Javascript + Typescript/자바스크립트로 알고리즘풀기

[백준] 11053

치춘 2022. 6. 17. 21:21

가장 긴 증가하는 부분 수열

문제

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.

예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.

입력

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다.

둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000)

출력

첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다.

풀이

const long = () => {
  const [[n], arr] = require("fs")
    .readFileSync("/dev/stdin")
    .toString()
    .trim()
    .split("\n")
    .map((v) => v.split(" ").map(Number));
  let dp = Array.from({ length: n }, (v) => 1);
  for (let i = 0; i < n; i++)
    for (let j = 0; j < i; j++)
      if (dp[j] >= dp[i] && arr[i] > arr[j]) dp[i] = dp[j] + 1;
  console.log(Math.max(...dp));
};

long();

반성회

초기화 하나를 잘못 해서… 이 사단이 났다

dp[0] 만 1로 초기화해주고 나머지는 0으로 초기화해줬었는데 그부분이 문제가 되었다

생각해보면 dp[i]i번째 원소를 포함하는 증가 부분 수열의 길이인데 0으로 초기화하면 i번째 원소 (arr[i]) 를 포함하지 않는다는 의미이니 당연히 이상하겠지..

'Javascript + Typescript > 자바스크립트로 알고리즘풀기' 카테고리의 다른 글

[백준] 2743  (0) 2022.06.17
[백준] 2748  (0) 2022.06.17
[백준] 11718  (0) 2022.06.17
[백준] 2738  (0) 2022.06.17
[백준] 9086  (0) 2022.06.17
Comments