131130 - 혼자 놀기의 달인
info
- 문제 보기: 131130 - 혼자 놀기의 달인
- 소요 시간: 22분 33초
- 풀이 언어:
java - 체감 난이도: 2️⃣
- 리뷰 횟수: ✅
풀이 키워드
스포주의
구현 그래프 dfs
풀이 코드
info
- 메모리: 89600 KB
- 시간: 1 ms
import java.util.*;
class Solution {
int[] cards;
boolean[] visited;
int findCycle(int i) {
if (visited[i]) return 0;
visited[i] = true;
return findCycle(cards[i]-1) + 1;
}
public int solution(int[] cards) {
this.cards = cards;
visited = new boolean[cards.length];
List<Integer> clenList = new ArrayList<>();
// 1. 모든 사이클 뭉치를 찾는다 (길이만 구해두기)
for (int i = 0; i < cards.length; ++i) {
clenList.add(findCycle(i));
}
if (clenList.size() < 2) return 0;
// 2. 뭉치 길이 제일 긴거 2개 곱하기
Collections.sort(clenList, Collections.reverseOrder());
return clenList.get(0) * clenList.get(1);
}
}
풀이 해설
알고리즘 자체의 난이도보단 약간의 독해력과 방향 그래프 문제로 치환하는 능지가 요구된다.
그래프 구현까진 안가고 visited 처리로 사이클 뭉치만 잘 찾아주면 된다.