(프로그래머 LV2) 솔로 플레이의 달인

내 솔루션

import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;

class Solo {
    static boolean() visited;
    static List<Integer> list=new ArrayList<>();
    public int solution(int() cards) {
        int answer = 0;
        visited=new boolean(cards.length);
        int index=0;
        for(int i=0;i<cards.length;i++){
            if(!visited(i)){
                visited(i)=true;
                dfs(cards, cards(i)-1, 1);
            }

        }

        list.sort(new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2){
                return o2-o1;
            }
        });
        if(list.size()>=2)
            answer=list.get(0)*list.get(1);
        return answer;
    }

    private void dfs(int() cards, int c, int count){
        if(!visited(c)){
            visited(c)=true;
            dfs(cards, cards(c)-1, count+1);
        }
        else{
            list.add(count);
            return;
        }
    }
}
  • dfs가 생각나네요
  • 방문한 상자에 도달할 때까지 dfs를 사용하여 검색
  • 상자를 방문하면 번호가 목록에 저장됩니다.
  • 목록을 내림차순으로 정렬하고 첫 번째 그룹과 두 번째 그룹 수의 곱을 반환합니다.
  • 목록을 정렬할 때
    • Collections.sort(list, Collections.reverseOrder()) 를 사용하는 것이 더 쉽습니다.