Baekjoon Online Judge
문제
세준이와 세비는 온라인 게임을 즐겨한다. 이 온라인 게임에서는 군대를 서로 키울 수 있다. 세준이는 N명의 병사를 키웠고, 세비는 M명의 병사를 키웠다.
이제 서로 전쟁을 하려고 한다.
전쟁은 여러 번의 전투로 이루어진다. 각 전투에서 살아있는 병사중 제일 약한 병사가 죽는다. 만약 제일 약한 병사가 여러 명이고, 제일 약한 병사가 모두 같은 편에 있다면, 그 중에 한 명이 임의로 선택되어 죽는다. 하지만, 제일 약한 병사가 여러 명이고, 양 편에 모두 있다면, 세비의 제일 약한 병사 중 한 명이 임의로 선택되어 죽는다.
전쟁은 한 명의 병사를 제외하고 모두 죽었을 때 끝난다. 전쟁의 승자를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 100보다 작거나 같다. 각 테스트 케이스는 다음과 같이 이루어져 있다. 첫째 줄에 N과 M이 들어오고, 둘째 줄에는 세준이의 병사들의 힘이 들어오고, 셋째 줄에는 세비의 병사들의 힘이 들어온다. 힘은 정수이고, 이 값이 클수록 강하고, 작을수록 약하다.
각 테스트 케이스는 줄 바꿈으로 구분되어 있다.
출력
각 테스트 케이스에 대해서 한 줄에 하나씩 차례대로 승자를 출력한다. 세준이가 이기면 S를 세비가 이기면 B를 둘다 아닐 경우에는 C를 출력한다.
제한
- 1 ≤ N, M ≤ 1,000,000
병사들의 힘은 300,000,000보다 작거나 같은 자연수이다.
예제 입력 | 예제 출력 |
2 1 1 1 1 3 2 1 3 2 5 5 |
S B |
풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); // 테스트 케이스의 개수 T
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()); // 세비의 병사 수
// 세준이의 병사들 중 가장 강한 병사의 힘
int sejun = 0;
st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
if (st.hasMoreTokens()) {
int power = Integer.parseInt(st.nextToken());
if (power > sejun) sejun = power;
}
}
// 세비의 병사들 중 가장 강한 병사의 힘
int sebi = 0;
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++) {
if (st.hasMoreTokens()) {
int power = Integer.parseInt(st.nextToken());
if (power > sebi) sebi = power;
}
}
// 출력
if (sejun < sebi)
System.out.println("B");
else
System.out.println("S");
}
}
}
입력받는 횟수가 많으므로 Scanner보다 빠른 BufferedReader를 사용하였다.
문제를 읽어보면 아무리 약한 병사가 많아도 강한 병사가 상대에 1명이라도 있다면 강한 병사 하나가 약한 병사를 모두 이길 수 있기에 약한 병사는 승패에 영향을 주지 않는다는 것을 알 수 있다. 세준과 세비의 전쟁에서 중요한 것은 강한 병사인데, 세준과 세비의 가장 강한 병사의 강함이 같다면 세비의 병사가 죽는다. 이를 통해 알 수 있는 세준과 세비의 우승 조건은 아래와 같다.
세준 : 세비의 가장 강한 병사와 같거나 더 강한 병사가 있을 때
세비 : 세준의 가장 강한 병사보다 더 강한 병사가 있을 때
누가 이기는지 확인하기 위해 세준, 세비의 병사들 중 가장 강한 병사의 힘을 각각 찾았다.
그 뒤 세준과 세비의 가장 강한 병사의 힘을 비교한 뒤 우승한 사람을 출력했다.
'백준 > JAVA' 카테고리의 다른 글
[Baekjoon/JAVA] 1598번 - 꼬리를 무는 숫자 나열 (0) | 2022.07.30 |
---|---|
[Baekjoon/JAVA] 1592번 - 영식이와 친구들 (0) | 2022.07.30 |
[Baekjoon/JAVA] 1568번 - 새 (0) | 2022.07.19 |
[Baekjoon/JAVA] 1526번 - 가장 큰 금민수 (0) | 2022.06.05 |
[Baekjoon/JAVA] 1408번 - 24 (0) | 2022.05.30 |