프로그래머스 LEVEL 2(혼자 놀기의 달인)
-
사용 언어 : javascript
-
해결 날짜 : 2022-12-05
-
해결 방법 :
- cards의 길이가 100 이하이고, 심지어 진행할 수록 중복되는 값이 많아지니 실제로는 10,000 보다 적으므로 이중 반복문을 사용
- 1번 카드부터 돌되, 이미 구했던 그룹이거나 한 바퀴 돌았다면 다음 인덱스로 넘어감
- 한 바퀴 도는 과정에서, box에 현재 카드의 값들을 추가
- 한 바퀴 돌고 난 뒤,
- box에 들어 있는 card들을 copy_cards에 push
- box_count에 box 속 들어 있는 card의 개수를 push
- copy_cards에 들어 있는 card의 개수와 cards의 개수가 같을 경우 반복문 종료
- box_count의 길이가 1인 경우(1번 상자 그룹 밖에 없는 경우), 0 반환
- 그 외의 경우 내림차순 정렬 후 큰 2개 값 곱해서 반환
-
회고 :
- x
-
코드
function solution(cards) { let index = 1; const copy_cards = []; const box_count = []; while (true) { let idx = index++; const box = []; while (true) { const card = cards[idx - 1]; if (copy_cards.includes(card) || box.includes(card)) { break; } box.push(card); idx = card; } if (box.length !== 0) { copy_cards.push(...box); box_count.push(box.length); } if (copy_cards.length === cards.length) { break; } } if (box_count.length === 1) { return 0; } box_count.sort((a, b) => b - a); return box_count[0] * box_count[1]; }
-
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges