[99클럽 코테 스터디 30일차 TIL] 백준 1542번 세준세비

말하는 감자·2024년 11월 26일
0
post-thumbnail

99클럽 코테 스터디 30일차 TIL

💙 JAVA 비기너

📌 오늘의 학습 키워드

  • 힙(우선순위 큐)

📌 공부한 내용

📍 오늘의 문제

📍 작성 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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 T = Integer.parseInt(br.readLine());
		
		for(int i=0; i<T; i++) {
			br.readLine();
			StringTokenizer st = new StringTokenizer(br.readLine());
			int N = Integer.parseInt(st.nextToken());
			int M = Integer.parseInt(st.nextToken());
			PriorityQueue<Integer> sejun = new PriorityQueue<>();
			PriorityQueue<Integer> sebi = new PriorityQueue<>();
			
			StringTokenizer sejunSoldiers = new StringTokenizer(br.readLine());
			for(int j=0; j<N; j++) {
				sejun.add(Integer.parseInt(sejunSoldiers.nextToken()));
			}
			StringTokenizer sebiSoldiers = new StringTokenizer(br.readLine());
			for(int j=0; j<M; j++) {
				sebi.add(Integer.parseInt(sebiSoldiers.nextToken()));
			}
			
			while(!sejun.isEmpty() && !sebi.isEmpty()) {
				int sejunSoldier = sejun.peek();
				int sebiSoldier = sebi.peek();
				
				if(sejunSoldier < sebiSoldier) sejun.poll();
				else sebi.poll();
			}
			
			bw.write((sejun.isEmpty() ? "B\n" : "S\n"));
		}
		
		br.close();
		
		bw.flush();

        bw.close();
		
    }
}

📌 오늘의 회고

회식을 끝내고 하는 공부란 아주 산뜻하다...🤤

세준과 세비의 병사들을 각각의 우선순위 큐 sejun, sebi에 넣어주고 오름차순으로 정렬이 되었을테니 하나씩 꺼내서 값을 비교해주면 된다.

세준의 병사가 세비의 병사보다 힘이 낮다면 세준의 병사큐인 sejun에서 요소를 하나 제거해주고 둘이 같거나 세비의 병사가 더 힘이 낮다면 sebi에서 하나의 요소를 제거해줬다.

sejunsebi 둘 중 하나라도 비게 된다면 온라인 게임이 종료되므로 while문의 조건은 둘 다 비어있지 않는 조건으로 해줬다.

❓ 둘다 아닐 경우에는 C를 출력하라고 적혀있는데 이런 경우가 있나...?
일단 제출해보자!!

했는데 다행히 무사통과.
헷갈리게 만드려고 넣은건가 싶다.

입력을 받을 때 예제입력에서 테스트 케이스 사이에 빈칸을 입력하는 것이 있어서 테스트 케이스 시작 시 br.readLine();을 통해 에러가 나지 않도록 해줬다.

profile
나는 말하는 감자다

0개의 댓글