본문 바로가기
PS/BOJ

[자바] 백준 13458 - 시험 감독 (java)

by Nahwasa 2022. 8. 21.

 문제 : boj13458


 

필요 알고리즘 개념

  • 사칙연산
    • 나누기! 나머지! 덧셈뺄셈!

※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.

 


 

풀이

  N개의 시험장이 있을 시, 총감독관은 무조건 한명씩 있어야 하니 일단 N명의 감독관은 확정이다. 이후 N개의 시험장에 대해, 'Ai-B'를 C로 나눈 수 만큼의 부감독관이 필요하다. 그리고, 'Ai-B'가 C로 나누어떨어지지 않는다면 한명이 더 필요하다. 위에 말한걸 구현해주면 된다!

 

 

  예를들어서

3
3 4 5
2 2

를 보자.

 

최종 출력할 답이 sum이라 할 시, 일단 sum=3 이다(총감독관 수).

그럼 N개의 시험장에 남은 인원수는 각각 1,2,3명이고, 각각 C로 나눈 수는 0,1,1 / 각각 C로 나눈 나머지는 1,0,1 이므로 각각 1, 1, 2를 더해주게 되어 sum=3+1+1+2 = 7이 된다. 


 

코드 : github

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

public class Main {
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        st = new StringTokenizer(br.readLine());
        int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
        long sum = n;
        for (int i = 0; i < n; i++) {
            int cur = arr[i] - b;
            if (cur <= 0) continue;
            sum+=cur/c + (cur%c==0?0:1);
        }
        System.out.println(sum);
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글