본문 바로가기

Algorithm

[BaekJoon] 1542 세준세비 JAVA

🔗 백준 1542 문제 https://www.acmicpc.net/problem/1524

문제

세준이와 세비는 온라인 게임을 즐겨한다. 이 온라인 게임에서는 군대를 서로 키울 수 있다. 세준이는 N명의 병사를 키웠고, 세비는 M명의 병사를 키웠다.

 

이제 서로 전쟁을 하려고 한다.

 

전쟁은 여러 번의 전투로 이루어진다. 각 전투에서 살아있는 병사 중 제일 약한 병사가 죽는다. 만약 제일 약한 병사가 여러 명이고, 제일 약한 병사가 모두 같은 편에 있다면, 그 중에 한 명이 임의로 선택되어 죽는다. 하지만, 제일 약한 병사가 여러명이고, 양 편에 모두 있다면, 세비의 제일 약한 병사 중 한 명이 임의로 선택되어 죽는다.

 

전쟁은 한 명의 병사를 제외하고 모두 죽었을 때 끝난다. 전쟁의 승자를 출력하는 프로그램을 작성하시오.


입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 100보다 작거나 같다. 각 테스트 케이스는 다음과 같이 이루어져 있다. 첫째 줄에 N과 M이 들어오고, 둘째 줄에는 세준이의 병사들의 힘이 들어오고, 셋째 줄에는 세비의 병사들의 힘이 들어온다. 힘은 정수이고, 이 값이 클수록 강하고, 작을수록 약하다.

 

각 테스트 케이스는 줄 바꿈으로 구분되어 있다.


출력

각 테스트 케이스에 대해서 한 줄에 하나씩 차례대로 승자를 출력한다. 세준이가 이기면 S를 세비가 이기면 B를 둘 다 아닐 경우에는 C를 출력한다.


풀이

문제를 이해하는데 시간이 조금 걸렸지만 막상 이해하고 보니 어려운 문제는 아니었다.

약한 병사가 양 쪽에 있다면 세비의 병사가 죽고.. 등등 과 같은 전제는 문제를 어렵게 보이게 하기위한것 같았고

결국에는 세준의 병사들과 세비의 병사들 중 가장 힘이 센 병사가 존재하는 쪽이 이긴다는 것이다.

그렇기에 나는 세준과 세비의 병사들 중 가장 센 max를 찾아 비교하여 같다면 , 그리고 세준이 더 세다면 세준의 승리, 세비가 더 세다면 세비의 승리로 보내주면 된다고 생각했고 이렇게 풀었다.

 

내가 푼 코드

더보기
import java.io.*;
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());

        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 Smax = getMax(N, br); // 제일 강한 세준 병사
            int Bmax = getMax(M, br); // 제일 강한 세비 병사

            if (Bmax > Smax) System.out.println("B"); // 세비 병사가 더 세면
            else if (Smax > Bmax) System.out.println("S"); // 세준 병사가 더 세면 
            else System.out.println("S"); // 그 외
        }
    }

    public static int getMax(int num, BufferedReader br) throws IOException {
        StringTokenizer st = new StringTokenizer(br.readLine());

        int max = 0;
        for(int i = 0; i < num; i++) {
            int power = Integer.parseInt(st.nextToken());
            if(max < power) max = power;
        }
        return max;
    }
}

 

'Algorithm' 카테고리의 다른 글

[BaekJoon] 1181 단어 정렬 JAVA  (0) 2022.12.23
[BaekJoon] 1064 평행사변형 JAVA  (1) 2022.12.21
[BaekJoon] 2034 반음 JAVA  (0) 2022.12.21
[BaekJoon] 1032 명령프롬프트 JAVA  (0) 2022.12.20
[BaekJoon] 1010 다리놓기 JAVA  (1) 2022.12.19
Recent Posts
Popular Posts
Recent Comments