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 |