본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 13458 시험감독

by 까망 하르방 2021. 2. 20.
반응형

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

문제에서 제시하는 class의 구성원은 다음과 같다.

응시자 수 A명이 주어졌을 때, 총 감독관 1명과 여러명의 부감독관이

서로 겹치지 않게 수험생을 관리해야

최소 인원으로 구성된 감독관으로 진행될 수 있다.

이때, 총 감독관이 1명이 무조건 있고, 부감독관이 몇 명이 되는지 구해야 한다.

 Input 
3
3 4 5
2 2

 Output 

7

[0] 수험생 3명 - 총감독관 1명이 2명 mark / 부감독관 1명이 1명 mark

[1] 수험생 4명 - 총감독관 1명이 2명 mark / 부감독관 1명이 2명 mark 

[2] 수험생 5명 - 총감독관 1명이 2명 mark / 부감독관 1명이 2명 mark  + 다른 부감독관 1명이 1명 mark

 총감독관 3명 + 부감독관 4명을 합쳐서 7명의 감독관 최소인원이 나온다.

 

각 class마다 먼저 총감독관이 mark할 수 있는 인원수를 주어진 수험생에서 빼고

남은 인원수를 mark 하기 위해 부감독관이 몇 명 투입되는지 도출


import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        
        BigInteger[] arrNum = new BigInteger[T];
        for(int i=0; i<T; i++) {
            arrNum[i] = sc.nextBigInteger();
        }
        BigInteger mainNum = sc.nextBigInteger();
        BigInteger subNum = sc.nextBigInteger();
        
        BigInteger result = new BigInteger("0");
        BigInteger one = new BigInteger("1");
        BigInteger zero = new BigInteger("0");
        

        int idx = 0;
        while(true) {
            arrNum[idx] = arrNum[idx].subtract(mainNum);
            result = result.add(one);

            if(arrNum[idx].compareTo(zero) >= 1) {
                if(arrNum[idx].remainder(subNum).equals(zero)) {
                    result = result.add((arrNum[idx].divide(subNum)));
                }
                else {
                    result = result.add(  (arrNum[idx].divide(subNum)).add(one)  );
                }
                arrNum[idx] = zero;
            }

            if(arrNum[idx].compareTo(zero) <= 0) {
                idx++;
                if(idx == arrNum.length)
                    break;
            }
            
        }

        System.out.println(result);
    }
}

반응형

댓글