[프로그래머스] 혼자 놀기의 달인

package org.example.알고리즘.혼자놀기의달인;

class Solution {
    public static void main(String[] args) {
        int[] cards = {8, 6, 3, 7, 2, 5, 1, 4};
        Solution solution = new Solution();
        System.out.println(solution.solution(cards));
    }
    
    public int solution(int[] cards) {
        int maxScore = 0;
        
        for (int start = 1; start <= cards.length; start++) {
            boolean[] visited = new boolean[cards.length + 1];
            int groupSize1 = getGroupSize(start, cards, visited);
            
            for (int i = 1; i <= cards.length; i++) {
                if (!visited[i]) {
                    int groupSize2 = getGroupSize(i, cards, visited);
                    maxScore = Math.max(maxScore, groupSize1 * groupSize2);
                }
            }
            
        }
        return maxScore;
    }
    
    private int getGroupSize(int start, int[] cards, boolean[] visited) {
        int groupSize = 0;
        int current = start;
        
        while (!visited[current]) {
            visited[current] = true;
            groupSize++;
            current = cards[current - 1];
        }
        
        return groupSize;
    }
}
  • 단순하다
    1. card 배열 순회 1부터 ~ 끝까지
      1. visited 안에 해당 번호 인덱스 방문처리
      1. 그룹 사이즈 ++
      1. 1번이면 card[index-1] 번을 다음 탐색 인덱스로 설정
        1. 즉, 일련의 그룹화 수행한다.
          1. 남은 숫자의 그룹중에 가장 큰 사이즈를 찾기위해
            1. 다시 첫번째 원소부터 순회하며 그룹 사이즈를 구함.


Uploaded by N2T