99클럽 코테 스터디 30일차 TIL - priority queue, 병사

수삼·2024년 11월 26일
0

코딩테스트

목록 보기
35/44

import java.io.*;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int cnt = Integer.parseInt(br.readLine());

        for (int i = 0; i < cnt; i++) {
            br.readLine();

            PriorityQueue<Integer> sj = new PriorityQueue<>(); // 세준의 병사
            PriorityQueue<Integer> sb = new PriorityQueue<>(); // 세비의 병사

            StringTokenizer st = new StringTokenizer(br.readLine()); // 각 병사의 수

            StringTokenizer st_sj = new StringTokenizer(br.readLine()); // 세준 병사의 전투력
            StringTokenizer st_sb = new StringTokenizer(br.readLine()); // 세비 병사의 전투력
            while (st_sj.hasMoreTokens()) {
                sj.add(Integer.parseInt(st_sj.nextToken()));
            }
            while (st_sb.hasMoreTokens()) {
                sb.add(Integer.parseInt(st_sb.nextToken()));
            }

            while (!sj.isEmpty() && !sb.isEmpty()) {
                if (sj.size() + sb.size() == 1) {
                    break;
                } else if (sj.peek() == sb.peek() || sj.peek() > sb.peek()) {
                    sb.poll();
                } else {
                    sj.poll();
                }
            }

            bw.write(sj.size() > 0 ? 'S' : sb.size() > 0 ? 'B' : 'C');
            bw.write("\n");
        }

        bw.flush();
        bw.close();
        br.close();
    }
}

설명

  1. 우선순위 큐에 넣고
  2. 가장 먼저 나오는 숫자를 비교해 작은 수를 제거한다.
  3. 마지막에 남는 사람이 승자

회고

  1. 둘 다 이기지 않은 경우가 어떤 경우인지 모르겠다.
  2. 가장 높은 숫자를 누가 갖고 있는지만 찾아도 되는 문제였다.

0개의 댓글