티스토리 뷰

가장 긴 증가하는 부분 수열

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 256 MB 30793 11412 7798 37.021%

문제

수열 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의 가장 긴 증가하는 부분 수열의 길이를 출력한다.

예제 입력 1 복사

6 10 20 10 30 20 50

예제 출력 1 복사

4

출처

풀이

이중 for문

let input = [];
require('readline')
    .createInterface(process.stdin, process.stdout)
    .on('line',
        function(line) {
            input.push(line.trim());
        })
    .on('close',
        function() {
            // 입력값 처리 및 출력
            const count = input[0]
            // 배열 처리
            const arr = input[1].split(' ').map(value => value * 1)

            // dp
            let dp = []

            for(let i = 0; i < arr.length; i++) {
                let max = 0
                for(let j = 0; j< i; j++) {
                    if(arr[j] < arr[i] && dp[j] > max)
                        max = dp[j]
                }
                dp.push(max + 1)
            }

            const result = dp.reduce( (max,val) => {
                if(max > val) return max
                else return val
            },0)
            
            console.log(result)

        });

 

이중 reduce문

let input = [];
require('readline')
    .createInterface(process.stdin, process.stdout)
    .on('line',
        function(line) {
            input.push(line.trim());
        })
    .on('close',
        function() {
            // 입력값 처리 및 출력
            const count = input[0]
            // 배열 처리
            const arr = input[1].split(' ').map(value => value * 1)

            // dp
            let dp = []
            const result = arr.reduce((max, val, i) => {
                const curDp = dp.reduce((maxVal,curVal,j) => arr[j] < arr[i] && curVal > maxVal ? curVal : maxVal, 0) + 1
                dp.push(curDp)
                return max < curDp ? curDp : max
            },0)
            
            console.log(result)

        });

 

댓글