일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- BufferedReader
- 완전탐색
- Java
- 시뮬레이션
- Queue
- 스택
- oracle
- 다리 만들기
- 프로그래머스
- 탐색
- 문자열
- 백트래킹
- 다이나믹프로그래밍
- 새벽코딩
- 아스키코드
- 알고리즘
- Python
- 브루트포스
- HashMap
- 백준
- dfs
- LIS
- DP
- Stack
- 빅데이터
- BFS
- SQL
- 배열
- 그리디
- 구현
- Today
- Total
새벽코딩
[백준] [13458] 시험 감독 (사칙연산) (JAVA) 본문
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
문제
총 N개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다. i번 시험장에 있는 응시자의 수는 Ai명이다.
감독관은 총감독관과 부감독관으로 두 종류가 있다. 총감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 B명이고, 부감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 C명이다.
각각의 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러 명 있어도 된다.
각 시험장마다 응시생들을 모두 감시해야 한다. 이때, 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다.
둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다.
셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)
출력
각 시험장마다 응시생을 모두 감독하기 위해 필요한 감독관의 최소 수를 출력한다.
예제 입력 1 복사
1
1
1 1
예제 출력 1 복사
1
예제 입력 2 복사
3
3 4 5
2 2
예제 출력 2 복사
7
예제 입력 3 복사
5
1000000 1000000 1000000 1000000 1000000
5 7
예제 출력 3 복사
714290
예제 입력 4 복사
5
10 9 10 9 10
7 20
예제 출력 4 복사
10
예제 입력 5 복사
5
10 9 10 9 10
7 2
예제 출력 5 복사
13
※ JAVA 코드 (시험 감독)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
// 감독관 수
long man = 0;
// 시험장 개수
int N = Integer.parseInt(br.readLine());
ArrayList<Integer> A = new ArrayList<>();
st = new StringTokenizer(br.readLine());
// 응시자 수
while(st.hasMoreTokens()) {
A.add(Integer.parseInt(st.nextToken()));
}
st = new StringTokenizer(br.readLine());
// 총감독관
int B = Integer.parseInt(st.nextToken());
// 부감독관
int C = Integer.parseInt(st.nextToken());
for(int i = 0; i < N; i++) {
// 총감독관이 대응 할 수 있는 수가 더 많다면
if(A.get(i) <= B) {
man += 1;
} else {
man += (A.get(i) - B) % C == 0 ? (A.get(i) - B) / C + 1 : (A.get(i) - B) / C + 2;
}
}
System.out.println(man);
}
}
※ 생각정리 (시험 감독)
시험 감독문제는 정수형의 범위를 고려하여 long형의 변수를 만들어 총 감독의 수를 담도록 하였다.
시험장이 최대 1,000,000개, 각 시험자의 최대 응시자는 1,000,000명 이므로, 최대 1,000,000,000,000의 수가 될 수 있다.
시험장에 응시자의 수가 총감독관이 대응할 수 있는 수 보다 적으면 1을 더하고, 아니라면,
총감독관이 대응할 수 있는 수를 뺀 수에서 부감독관이 대응할 수 있는 수를 나누었다.
-새벽코딩-
'알고리즘' 카테고리의 다른 글
[백준] [2146] 다리 만들기 (BFS) (JAVA) (0) | 2023.01.17 |
---|---|
[백준] [3187] 양치기 꿍 (BFS) (JAVA) (0) | 2023.01.16 |
[백준] [2217] 로프 (그리디, 정렬) (JAVA) (0) | 2023.01.12 |
[백준] [11652] 카드 (자료구조) (JAVA) (0) | 2023.01.11 |
[백준] [2589] 보물섬 (BFS) (JAVA) (0) | 2023.01.10 |