๐ ๋ฌธ์ ๋งํฌ
ํผ์ ๋๊ธฐ์ ๋ฌ์ธ
์ฝ๋ฉํ
์คํธ ์ฐ์ต - ํผ์ ๋๊ธฐ์ ๋ฌ์ธ ๋ฌธ์ ์
๋๋ค.
๐ก ๋ฌธ์ ํ์
1 ~ cards.length์ ์ซ์ ์นด๋๊ฐ ๋ฌด์์ ์์๋ก ์์๋ง๋ค ํ๋์ฉ ๋ค์ด ์๋ค(cards[i]๋i+1๋ฒ ์์ ์์ ์นด๋ ๋ฒํธ).- ์์์ ์์๋ฅผ ์ด์ด ๋์จ ์นด๋ ๋ฒํธ์ ํด๋นํ๋ ์์๋ฅผ ๋ค์ ์ฌ๋ ๊ณผ์ ์, ์ฒ์ ์ฐ ๋ฒํธ๊ฐ ๋ค์ ๋์ฌ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
- ์ด๋ ๊ฒ ์ด์๋ ์์๋ค์ด
1๋ฒ ๊ทธ๋ฃน, ๋๋จธ์ง ์์๋ค์ด2๋ฒ ๊ทธ๋ฃน์ด ๋๋ฉฐ,1๋ฒ ๊ทธ๋ฃน ํฌ๊ธฐ ร 2๋ฒ ๊ทธ๋ฃน ํฌ๊ธฐ์ ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๐๏ธ ์ ๊ทผ ๋ฐฉ๋ฒ
- ์ด๋ค ์์์์ ์์ํ๋ , ๊ทธ ์์๊ฐ ์ํ ์ฌ์ดํด(๊ทธ๋ฃน)์ ํฌ๊ธฐ๋ ํญ์ ์ ํด์ ธ ์๋ค.
- ์ฆ ์ ์ฒด ์์๋ฅผ ์ํํ๋ฉด์, ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์์๋ฅผ ์์์ ์ผ๋ก
cards[cur] - 1์ ๋ฐ๋ผ๊ฐ๋ฉฐ ํ๋์ ์ฌ์ดํด์ ๊ตฌ์ฑํ๋ ์์ ๊ฐ์๋ฅผ ์ผ๋ค. - ๋ชจ๋ ์ฌ์ดํด์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ ๋ค ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๊ณ , ๊ฐ์ฅ ํฐ ๋ ๊ทธ๋ฃน์ ํฌ๊ธฐ๋ฅผ ๊ณฑํ๋ฉด ์ ๋ต์ด ๋๋ค.
- ์ฌ์ดํด์ด ํ๋๋ฟ์ด๋ผ๋ฉด(๊ทธ๋ฃน์ ๋ ๊ฐ๋ก ๋๋ ์ ์๋ค๋ฉด)
0์ ๋ฐํํ๋ค.
๐งฉ ์ฝ๋ ๊ตฌํ
import java.util.*;
class Solution {
public int solution(int[] cards) {
List<Integer> group = new ArrayList<>();
boolean[] visited = new boolean[cards.length];
for (int i = 0; i < cards.length; ++i) {
if (visited[i]) continue;
int cnt = 0;
int cur = i;
while (!visited[cur]) {
visited[cur] = true;
cnt++;
cur = cards[cur] - 1;
}
group.add(cnt);
}
group.sort(Collections.reverseOrder());
if (group.size() == 1) return 0;
return group.get(0) * group.get(1);
}
}