공log/[P&B]

[P&B] #30 PreCodingTest

ming_OoO 2023. 8. 17. 04:20
728x90

프리코딩테스트 2-5

 

3) Card Life Game

오답 노트 코드

class Solution {
	public static int solution(int[] cards) {
        PriorityQueue<Integer> pq = new PriorityQueue<>((x, y) -> y - x);
        for (int i = 0; i < cards.length; i++) {
            pq.offer(cards[i]);
        }

        while(pq.size() != 1) {
            int cur = pq.poll();
            int next = pq.poll();

            pq.offer(cur - next);
        }

        int answer = pq.poll();
        return answer;
    }
}

 

문제 풀이 코멘트

라이프 수치 배열을 우선순위 큐에 추가: 문제의 시작은 주어진 라이프 수치 배열을 우선순위 큐에 추가하는 것입니다. 우선순위 큐는 라이프 수치를 내림차순으로 관리하며, 가장 높은 라이프 수치를 가진 카드가 우선적으로 처리됩니다.

게임 진행: 우선순위 큐에 카드가 1장 이상 남아있을 때까지 아래의 단계를 반복합니다.

  • 가장 높은 라이프 수치를 가진 카드를 가져옵니다.
  • 다음으로 높은 라이프 수치를 가진 카드를 가져옵니다.
  • 두 카드의 라이프 수치를 비교하여 겨루는 규칙에 따라 처리합니다. 만약 x와 y가 두 카드의 라이프 수치라면,
    • x == y: 두 카드 모두 소멸합니다.
    • x > y: y 카드는 소멸하고 x 카드의 라이프 수치가 y만큼 차감된 후 카드 뭉치에 다시 넣습니다.
    • y > x: x 카드는 소멸하고 y 카드의 라이프 수치가 x만큼 차감된 후 카드 뭉치에 다시 넣습니다.

게임 종료 및 결과 반환: 게임이 종료되면 우선순위 큐에 남아 있는 카드 중 하나의 라이프 수치를 반환합니다. 이 값이 마지막에 남은 카드의 라이프 수치가 됩니다.

 

우선순위 큐에 대한 공부가 더 필요하다는 생각이 들었던 문제입니다.

728x90

'공log > [P&B]' 카테고리의 다른 글

[P&B] #32 PreCodingTest  (0) 2023.08.19
[P&B] #31 PreCodingTest  (0) 2023.08.18
[P&B] #29 PreCodingTest  (0) 2023.08.16
[P&B] #28 PreCodingTest  (0) 2023.08.15
[P&B] #27 PreCodingTest  (0) 2023.08.14