컴공댕이 공부일지

[java] 백준 ( 13458 시험 감독 ) 본문

문제 풀이/코딩 문제 풀이 모음

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

은솜솜솜 2023. 3. 30. 19:15
728x90

13458 시험 감독 

브론즈 2

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

 

13458번: 시험 감독

첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)

www.acmicpc.net

 

 

 

정답코드 

import java.util.Scanner;

public class Dr {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		int n=s.nextInt();
		int [] num = new int [n];
		
		for(int i=0; i<n; i++) {
			num[i]=s.nextInt();
		}
		
        

		int b=s.nextInt();
		int c=s.nextInt();
	
//      #### 2번 오류 : 자료형 ####
		long count=0;
		
		for(int i=0; i<n; i++) {
			if(num[i]>b) { //총감독 한명 배치
				num[i]-=b;
				count++;
			} else { //총감독 한명만으로 충분한 경우
				count++;
				continue;
			}
			
			if(num[i]%c!=0) { //나눠떨어지지 않으면 부감독 한 번 더 배치해야해.
				count+=((num[i]/c)+1);
			} else {
				count+=num[i]/c;
			}
				
			/*	#### 1번 오류 : 시간초과 ####
			while(num[i]>0) {
				num[i]-=c; //다 감독할 수 있을 때까지 부감독 배치
				count++;
			}*/
		}
		
		
		System.out.println(count);
	}

}

 

 

# 2번의 실패

 

풀이 자체는 간단한데 오류가 좀 있었다.

 

1] 시간초과

첨에 부감독 배치할 때 while을 사용해서 시간 초과가 났다. 그냥 나머지와 몫을 이용하면 되는데.. 비효율적으로 하나하나 빼면서 카운트하려니 값이 커지면 시간 초과가 발생하게 된 것이다.

=>몫과 나머지 연산자로 계산해 해결했다.

 

2] 자료형 오류

예제에 나온 테스터 케이스는 다 맞게 나오는데 내가 못찾은 반례가 있나 고민했다. 그런데 아무리 뜯어봐도 틀린 풀이는 없는 것 같아 질문 게시판을 활용해봤다. 알고보니 자료형 문제였다. 전체 감독관 수를 계산하다보면 카운팅이 정수 범위를 넘어갈 수도 있다.

=>count를 long 자료형으로 바꿔 해결했다.

 

+)

int의 최대값은 2147483647이다.

그래서 long으로 받았다. c였다면 long long 자료형을 사용했어야 했을 것이다.

long으로 안되는 수는 그냥 문자열로 받아 풀면 된다.

 

 

 

 

브론즈 2인데 삼성 기출이길래 뭘까 하면서 풀어봤는데 함정(?)에 고대로 걸려든 코린이....ㅎ

 

 

 

728x90
Comments