프로그래머스 LEVEL 2(혼자 놀기의 달인)

image

  • 사용 언어 : 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