[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / Java] - ํ˜ผ์ž ๋†€๊ธฐ์˜ ๋‹ฌ์ธ

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

ํ˜ผ์ž ๋†€๊ธฐ์˜ ๋‹ฌ์ธ
์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํ˜ผ์ž ๋†€๊ธฐ์˜ ๋‹ฌ์ธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
school.programmers.co.kr

๐Ÿ’ก ๋ฌธ์ œ ํŒŒ์•…

  • 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);
    }
}