컴공댕이 공부일지
[java] 백준 ( 13458 시험 감독 ) 본문
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
'문제 풀이 > 코딩 문제 풀이 모음' 카테고리의 다른 글
[java] 백준 ( 10950, 10951, 10952 A+B ) ★EOP (0) | 2023.04.06 |
---|---|
[java] 백준 ( 2477 참외밭 ) 💥💦 (0) | 2023.04.05 |
[java] 백준 ( 13015 별 찍기-23 ) (0) | 2023.03.24 |
[java] 백준 ( 10818 최소, 최대 / 1924 2007년) (1) | 2023.03.23 |
[c언어, java] 백준 (2675 문자열 반복 / 1002 터렛) (0) | 2023.03.21 |
Comments