문제 설명
혼자서도 잘 노는 범희는 어느 날 방구석에 있는 숫자 카드 더미를 보더니 혼자 할 수 있는 재미있는 게임을 생각해냈습니다.
상자 안에 들어있는 카드 번호가 순서대로 담긴 배열 cards가 매개변수로 주어질 때, 범희가 이 게임에서 얻을 수 있는 최고 점수를 구해서 return 하도록 solution 함수를 완성해주세요.
1번 상자 그룹에 속한 상자의 수와 2번 상자 그룹에 속한 상자의 수를 곱한 값이 게임의 점수입니다.
방문확인 boolean을 통해 하나의 sum을 만든후 그것을 리스트로 만든다.
이후 리스트를 정렬해 크기가 2이상이면 첫번째와 두번째를 곱한값을 리턴 아니라면 0을 리턴한다.
코드
import java.util.*;
class Solution {
public int solution(int[] cards) {
boolean[] visit = new boolean[cards.length];
ArrayList<Integer> aList = new ArrayList<>();
int answer =0;
for(int i=0;i<cards.length;i++){
boolean flag =true;
if(visit[i]) continue;
int list=cards[i]-1;
int sum=0;
while(flag){
if(visit[list]){
aList.add(sum);
flag=false;
}
sum++;
visit[list] =true;
list = cards[list]-1;
}
}
aList.sort(Comparator.reverseOrder());
return aList.size()>=2?aList.get(0)*aList.get(1):0;
}
}
간단한 순회 문제였지만 방문확인용 boolean이 갑자기 떠오르지않아 tmp를 사용하는 바보같은 행동을 저질렀다. 다음부터는 문제를 자세하게 읽도록해야겠다.