프로그래머스 - 혼자 놀기의 달인

홍성진·2023년 5월 5일
0

프로그래머스 - 혼자 놀기의 달인

주어진 숫자 카드 더미에서 가장 긴 두 cycle들의 길이를 곱해서 반환하는 문제입니다. cards를 읽으며 방문한 곳은 값을 0으로 변경합니다. 계속 방문하며 값이 0인 곳에 도달하면 한 cycle이 끝난 것입니다. 이런 식으로 cards를 모두 방문하며 제일 긴 cycle의 길이 first와 두번째로 긴 cycle의 길이 second를 갱신하면 됩니다.

class Solution {
    public int solution(int[] cards) {
        int first = 0;
        int second = 0;
        int next = 0;

        while (next < cards.length) {
            int cur = 0;
            
            while (cards[next] > 0) {
                int temp = cards[next];
                cards[next] = 0;
                next = temp - 1;
                cur++;
            }
            
            next++;
            
            if (cur == cards.length) {
                return 0;
            }
            
            if (cur >= first) {
                second = first;
                first = cur;
            } else if (cur > second) {
                second = cur;
            }
        }
        
        return first * second;
    }
}

0개의 댓글