본문 바로가기
Algorithm/프로그래머스

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

by LeeGangEun 2023. 6. 20.

https://school.programmers.co.kr/learn/courses/30/lessons/131130?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이


따로 부연설명이 필요 없을 것 같다.
cards 배열 전체순회하며, 방문한 카드는 방문하지 않고,
count 를 비교해주며
firstMax와 secondMax를 갈아치워주는 로직
여기서 주의할점은 단 한가지이다.
firstMax 값을 업데이트할 때 secondMax값을 firstMax값으로 넣어줘야 한다.

class Solution {

    public int solution(int[] cards) {
        
        int firstMax = 0;
        int secondMax = 0;
        boolean[] visited = new boolean[cards.length];
        
        for(int i = 0; i < cards.length; i++){
            int idx = cards[i] - 1;
            int count = 0;
            
            while(true) {
                if (visited[idx]) break;
        
                visited[idx] = true;
                count++;
                idx = cards[idx] - 1;
            }
        
            if (count > firstMax){
                secondMax = firstMax;
                firstMax = count;
            }  else if (count > secondMax) {
                secondMax = count;
            }
            
        }
        
        
        return firstMax * secondMax;
    }
    
}