최대 1 분 소요

part32. 혼자 놀기의 달인

js ver 1.0

function solution(cards) {
    const scores = []
    const opened = [];
    const toOpen = [...cards];
    let [card] = toOpen;

    while (card) {
        if (opened.includes(card)) {
            scores.push(opened.length);
            opened.length = 0;
            [card] = toOpen;
        } else {
            const removeIndex = toOpen.indexOf(card);
            toOpen.splice(removeIndex, 1);
            opened.push(card);
            card = cards[card - 1];
        }
    }

    if (scores.length >= 2) {
        const maxScore = Math.max(...scores);
        scores.splice(scores.indexOf(maxScore), 1);
        const secondMaxScore = Math.max(...scores);
        return maxScore * secondMaxScore;
    } else {
        return 0;
    }
}

실행결과_js ver 1.0


js ver 1.1

function solution(cards) {
    const scores = [];
    const opened = new Set();
    const toOpen = new Set(cards);
    const itr = toOpen.values();
    let card = itr.next().value;

    while (card) {
        if (opened.has(card)) {
            scores.push(opened.size);
            opened.clear();
            card = itr.next().value;
        } else {
            toOpen.delete(card);
            opened.add(card);
            card = cards[card - 1];
        }
    }

    if (scores.length >= 2) {
        const maxScore = Math.max(...scores);
        scores.splice(scores.indexOf(maxScore), 1);
        const secondMaxScore = Math.max(...scores);
        return maxScore * secondMaxScore;
    } else {
        return 0;
    }
}


실행결과_js ver 1.1


업데이트: