728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/131130#
풀이
이 문제는 중복 확인이 중요 로직이다.
필자는 중복 확인 속도가 빠른 Set 객체를 이용하지 않고 배열을 사용했는데, 첫 번째 이유는 저장되는 데이터의 양이 적기 때문이고, 두 번째 이유로는 나중에 각 데이터의 길이를 구할 때 배열을 이용하는 것이 더 편하기 때문이다.
문제를 풀며 조심해야하는 부분은 이미 결과 배열에 중복되는 데이터가 있으면 braek문을 사용하지말고, continue문을 이용하자. break문을 이용하면 다음에 검증해야할 데이터를 순회하지 않고 불완전하게 끝나기 때문에 continue문을 이용해 완전하게 순회하도록 하자.
코드
function solution(cards) {
let result = [];
for (let i = 0; i < cards.length; i++) {
const que = [i + 1];
let arr = [i + 1];
while (que.length) {
const idx = que.shift();
if (arr.includes(cards[idx - 1])) {
break;
}
else {
que.push(cards[idx - 1]);
arr.push(cards[idx - 1]);
}
}
if (i === 0 && arr.length === cards.length) {
return 0;
}
arr = arr.sort((a, b) => a - b).join(' ');
if (!result.includes(arr)) {
result.push(arr);
}
else continue;
}
result = result.map(e => e.split(' ').length).sort((a, b) => b - a);
return result[0] * result[1];
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 양궁대회 (0) | 2024.09.09 |
---|---|
[JS] 혼자서 하는 틱택토 (1) | 2024.09.06 |
[JS] 이모티콘 할인행사 (3) | 2024.09.02 |
[JS] 거스름돈 (1) | 2024.08.30 |
[JS] 가장 긴 팰린드롬 (0) | 2024.08.27 |