[백준 05587] 카드 캡터 상근이 [Java]

2025. 8. 5. 16:34PS 풀이/Baekjoon Online Judge

문제

http://boj.ma/5587

 

5587번: 카드 캡터 상근이

 

boj.ma

 


풀이

문제 요약

상근이와 근상이가 번갈아가며 가지고 있는 가장 작으면서도, 상대방보다 큰 카드를 내며 모든 카드를 다 내는 게임을 시뮬레이션 해야 한다.

아이디어

카드들을 TreeSet에 담고, 차례에 관계없이 마지막으로 낸 카드를 기준으로 작은 카드를 내야 하는 것에 유의하며 구현하면 된다.

        // Solve
        int prevCard = -1;
        boolean sangTurn = true;
        while (!sang.isEmpty() && !geun.isEmpty()) {
            if (sangTurn) {
                Integer sangCurCard = sang.higher(prevCard);
                if (sangCurCard == null) {
                    prevCard = -1;
                } else {
                    sang.remove(sangCurCard);
                    prevCard = sangCurCard;
                }
            } else {
                Integer geunCurCard = geun.higher(prevCard);
                if (geunCurCard == null) {
                    prevCard = -1;
                } else {
                    geun.remove(geunCurCard);
                    prevCard = geunCurCard;
                }
            }
            sangTurn = !sangTurn;
        }

마지막에는 각 TreeSet의 크기를 출력하면 된다.

        // Output
        System.out.println(geun.size());
        System.out.println(sang.size());
    }

풀이 시간

20분


소스코드

https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/easy/05587.java

 

problem-solving/baekjoon-online-judge/easy/05587.java at main · rogi-rogi/problem-solving

Daily Problem Solving Challenges. Contribute to rogi-rogi/problem-solving development by creating an account on GitHub.

github.com