시험감독

yonii·2021년 9월 7일
0

🔗문제 링크

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(); //시험장 개수
        long[] arr = new long[n]; //시험장 인원
        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }

        long b = in.nextInt(); //총감독관 응시자 수
        long c = in.nextInt(); //부감독관 응시자 수

        //총 감독관은 반드시 한명

        long answer = 0;
        for (int i = 0; i < n; i++) {
            if (arr[i] >= b) {
                arr[i] = arr[i] - b;
                answer++;

                if(arr[i]>0){
                    answer += arr[i]/c;
                    if(arr[i]%c>0) answer++;
                }
            } else {
                answer++;
            }
        }

        System.out.print(answer);

    }
}
  • 시간 초과
    총 감독관은 반드시 1명 필요 -> 총감독관 응시자 수 제외 후 남아 있는 응시자가 있다면 없을 때까지 while문 돌려서 부감독관 수 카운트
    -> for문안에서 while문을 돌리는게 시간초과 요소 였던 것 같음.

  • 실패
    시간초과 후 while문을 없애고 for문 안에서 총감독관 제외 후 남아 있는 응시자수를 처리.
    응시자수 / 부감독관응시자수 값을 더해주고 나머지가 있는 경우 +1 해주는 형식으로 구현.
    -> 자료형 오류

출력 값이 최대로 될 경우
B와 C가 모두 1이고, N이 1,000,000이며 모든 A의 값들이 1,000,000 이 경우, 답이 1,000,000,000,000으로 int 범위를 훨씬 넘음.
b와 c의 값을 long으로 변환하여 해결!

JAVA 자료형 범위

참고

JAVA 자료형

profile
공부하려고 노력ing....

0개의 댓글