인프런 커뮤니티 질문&답변
강의 코드에 반례가 있습니다.
작성
·
474
-1
입력이 [5, 2, 4, 6, 7]로 주게되면 5, 6, 7 를 뽑아내어 길이가 3인 최대 부분 증가수열을 만들 수 있습니다.
하지만 강의코드에서 위와 같이 입력을 주게되면 출력이 4가 나옵니다.
반례의 경우에도 올바른 출력이 나오도록 수정해보았습니다.
확인부탁드립니다.
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr){
let answer = 0;
let n = arr.length;
let dy = Array.from({length:n}, ()=>0);
dy[0] = 1;
let max = 0;
for(let i=1; i<n; i++){
if(arr[i] > arr[max]){
dy[i] = dy[i-1]+1;
max = i;
}
else dy[i] = dy[i-1];
answer = Math.max(answer, dy[i]);
}
return answer;
}
let arr=[5,2,4,6,7];
console.log(solution(arr));
</script>
</body>
</html>
퀴즈
동적 계획법(Dynamic Programming)의 핵심 원리로 가장 적절한 것은 무엇일까요?
탐욕적인 선택을 통해 매 단계 최적의 해를 찾는다.
문제를 작은 단위로 나누고, 중복되는 부분 문제의 해를 기록하여 활용한다.
문제를 동일한 크기의 하위 문제로 분할한 뒤 재귀적으로 해결한다.
모든 가능한 경우를 탐색하되, 불필요한 경로는 제외하며 해를 찾는다.





