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

 

프로그래머스

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

programmers.co.kr

 

Python으로 푼 문제를 Java로 다시 작성한 문제입니다.
풀이방법과 주의사항, Python 정답 코드를 보고 싶으신 분은 아래 링크를 확인해주세요!

 

 

https://nodingco.tistory.com/185

 

[Python] 프로그래머스 131130. 혼자 놀기의 달인 (Lv.2)

https://school.programmers.co.kr/learn/courses/30/lessons/131130 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞..

nodingco.tistory.com

 

 

기본적인 구현은 비슷하지만 정답 체크를 달리했습니다.

Python과 달리 Java는 배열에 값을 추가하기가 곤란하기 때문에 ArrayList LinkedList 같은 자료구조를 추가로 써야하는데, 귀찮기 때문에... 

answer1과 answer2로 정답 후보 두개를 관리해줬습니다.

 

새로운 값이 answer1보다 크거나 같다면 answer1을 answer2로, 새로운 값을 answer1로 넣어주면 됩니다.

(두 값이 같아도 갱신해줘야 합니다! 예를 들어 기존 후보가 4와 3이고 새로운 값이 4일때도 answer1을 2로 밀어줘야 4와 4로 16이라는 올바른 값을 return할 수 있습니다.) 

 

answer1보단 작지만 answer2보다 크다면 새로운 값을 answer2로 넣어주면 됩니다.

 

초기값을 -1로 넣어줬으므로, answer1 * answer2가 0보다 작다면 둘 중 하나가 -1이라는 소리고 사이클이 하나뿐이라는 얘기니 0을 return합니다. 아니라면 후보가 두개 이상이었다는 소리니 answer1 * answer2fmf return하면 됩니다.

 

class Solution {
    public int solution(int[] cards) {
        int answer1 = -1;
        int answer2 = -1;
        
        for(int i = 0; i < cards.length; i++){
            if(cards[i] == 0)
                continue;
            
            int box = cards[i] - 1;
            int nbox = -1;
            int count = 1;
            cards[i] = 0;
            
            while(true){
                if(cards[box] == 0){
                    if(count >= answer1){
                        answer2 = answer1;
                        answer1 = count;
                    }else if(count > answer2){
                        answer2 = count;
                    }
                    break;
                }
                
                nbox = cards[box] - 1;
                count ++;
                cards[box] = 0;
                box = nbox;
            }
            
        }
        
        if(answer1 * answer2 < 0){
            return 0;
        }
        
        return answer1 * answer2;
    }
}

 

728x90

+ Recent posts