Algorithm & Data Structure/문제풀이

[Algorithm] 백준온라인저지 13458번(BOJ-13458) 시험 감독 Java로 문제풀이!!

coding-knowjam(코딩노잼) 2021. 7. 18.
728x90

안녕하세요 Coding-Knowjam입니다.

오늘은 백준 온라인 저지에 있는 13458번 시험감독 문제를 Java로 풀어보겠습니다.

 

1. 문제 설명

문제를 설명하기에 앞서 아래 링크를 통해서 문제를 읽고 와주시길 바랍니다.

https://www.acmicpc.net/problem/13458

 

문제의 난이도는 브론즈 2로 상당히 쉬운 편에 속하는 문제입니다.

문제를 읽어보시면 아시겠지만 주어진대로 계산이 이루어지도록 구현만 하면 됩니다.

추가적으로 주의하실 점은 결괏값을 저장하는 변수를 int타입으로 하시면 안 된다는 점입니다.

int의 경우는 보통 21억 정도까지 저장할 수 있는데, 해당 문제의 최악의 경우는 int의 범위를 벗어나기 때문입니다.

예를 들어서 모든 감독관은 1명만 감시할 수 있다고 하겠습니다.

그리고 시험장의 개수와 시험장에 있는 응시자의 수가 모두 1,000,000인 경우는 1000000 * 10000000만큼 연산을 해보면 필요한 감독관은 1조 명으로 int타입은 사용하면 안 됩니다.

해당 부분을 주의해서 코드를 작성하시면 되겠습니다.

 

2. Java로 문제 풀이

package study.blog.codingnojam.algorithm;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_13458 {

    // 백준온라인저지 13458번 시험감독 문제 풀이
    public static void main(String[] args) throws IOException {

        // 주어진 입력 정보 받기
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 시험장 개수
        int N = Integer.parseInt(br.readLine());
        // 시험장에 있는 응시자의 수 배열
        String[] arr = br.readLine().split(" ");
        StringTokenizer st = new StringTokenizer(br.readLine());
        // 총감독관이 감독할 수 잇는 응시자의 수
        int B = Integer.parseInt(st.nextToken());
        // 부감독관이 감독할 수 있는 응시자의 수
        int C = Integer.parseInt(st.nextToken());

        // 필요한 감독관의 수를 저장할 결과 값 변수
        long count = 0;

        // 시험장의 수만큼 반복문 실행
        for (int i = 0; i < arr.length; i++) {
            // 시험장의 응시자 수
            int result = Integer.parseInt(arr[i]);

            // 남은 응시자 수 = 응시자 수 - 총 감독관이 감독할 수 있는 응시자 수
            result = result - B;
            // 필요한 감독관 수 +1
            count++;

            // 남은 응시자 수가 0명 이하면 부감독관 필요없으므로 다음 시험장으로 이동
            if (result <= 0) {
                continue;
            } else {
                // 남은 응시자 수가 1명 이상일 때

                // 남은 응시자 수 / 부감독관이 감독가능한 응시자 수
                // 위의 나눗셈 연산을 통해서 몫과 나머지를 구함
                int q = result / C;     // 몫
                int r = result % C;     // 나머지

                // 몫은 남은 응시자 감독에 필요한 부감독관의 수이므로 그대로 더해줌
                count = count + q;

                // 나머지가 1이상인 경우는 부감독관이 1명 더 필요하므로 감독관 수 +1 증가
                if (r > 0) {
                    count++;
                }
            }
        }
        // 결과 값 출력
        System.out.println(count);
    }
}

 

코드에 대한 설명은 라인별로 모두 주석을 달아놓았습니다.

어려운 문제는 아니므로 쉽게 이해하실 수 있을 겁니다.

감사합니다.


728x90

댓글