프로그래머스 - 혼자 놀기의 달인
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.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;
}
}