[프로그래머스] 카운트 다운

Chobby·2024년 2월 29일
1

Programmers

목록 보기
340/349

// 도저히 예상치 못한 결과로 보여, 소스 코드를 새롭게 작성해봅니다.
function solution(target) {
    // 배열 초기화
    let dp = Array.from({ length: target + 1 }, () => [Infinity, 0]);
    
    // 0 점수 초기화
    dp[0] = [0, 0];
    
    // 점수 1부터 target까지 순회
    for (let score = 1; score <= target; score++) {
        // 각 점수에 대한 최적의 방법 찾기
        for (let s = 1; s <= 20; s++) {
            for (let hit of [1, 2, 3]) {
                // 싱글, 더블, 트리플 고려
                let prevScore = score - s * hit;
                if (prevScore >= 0) {
                    let [thrw, singBulls] = dp[prevScore];
                        if (hit === 1) singBulls++; // 싱글일 경우만 카운트
                        if (thrw + 1 < dp[score][0] || (
                            thrw + 1 === dp[score][0] && singBulls > dp[score][1])) {
                            dp[score] = [thrw + 1, singBulls];
                        }
                }
            }
        }
        // 불 고려 (항상 싱글로만 계산)
        if (score >= 50 && dp[score-50][0] + 1 <= dp[score][0]) {
            dp[score] = [dp[score - 50][0] + 1, dp[score - 50][1] + 1];
        }
    }
    
    // 결과 반환
    return dp[target];
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글