문제 - 혼자 놀기의 달인
해당 글을 읽는데 제대로 이해를 못하고 처음에는 순열로 상자안에 들어있는 카드 번호를 만들어서 문제를 풀었다. 이 문제는 처음부터 카드 번호를 순서대로 담긴 배열을 주기 때문에 경로탐색느낌으로 문제를 풀면 된다.
import java.util.*;
class Solution {
PriorityQueue<Integer> pq;
public int solution(int[] cards)
{
int answer = 0;
int len = cards.length;
boolean visited[] = new boolean[len];
pq = new PriorityQueue<>(Collections.reverseOrder());
for(int i =0;i<len;i++)
{
if(!visited[i])
{
process(i,cards,visited,0);
}
}
//1번 상자의 그룹만 있는 경우
if(pq.size() < 2)
{
return 0;
}
int first = pq.poll();
int second = pq.poll();
return first * second;
}
public void process(int num,int []cards,boolean []visited,int cnt)
{
//이미 열려진 상자라면
if(visited[num])
{
pq.add(cnt);
return;
}
visited[num] = true;
process(cards[num]-1,cards,visited,cnt+1);
}
}