일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 14592번
- 티스토리챌린지
- 14322번
- 14215번
- Java
- 7489번
- 1568번
- Baekjoon
- 백준
- 21866번
- 자바
- 21964
- 14656번
- 10409번
- 1141번
- 1333번
- 오블완
- 20953번
- 25904번
- 프로젝트 기획서
- 25576번
- 14726번
- 1362번
- 14467번
- 10814번
- 24267번
- 5597번
- 2355번
- 25642번
- 나무 공격
- Today
- Total
suheang
[백준] | JAVA, 자바 | 13458번 - 시험감독 본문
https://www.acmicpc.net/problem/13458
문제 요약 :
총 N개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다. i번 시험장에 있는 응시자의 수는 Ai명이다.
감독관은 총감독관과 부감독관으로 두 종류가 있다. 총감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 B명이고, 부감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 C명이다.
각각의 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러 명 있어도 된다.
( 각 시험장마다 응시생들을 모두 감시해야 한다. 이때, 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성 )
문제 풀이 :
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
long sum = 0;
for (int i = 0; i < n; i++) {
if (a[i] - b > 0) {
sum++;
if ((a[i] - b) % c == 0) {
sum += (a[i] - b) / c;
} else {
sum += (a[i] - b) / c + 1;
}
} else {
sum++;
}
}
System.out.println(sum);
}
}
1. 시험장의 개수 n 개 입력받기
2. 입력받은 n 개만큼 응시자의 수 a 입력받기
3. 감독이 감시할 수 있는 응시자 수 b, 부감독관이 감시할 수 있는 응시자 수 c 입력받기
4. 감독관의 수를 저장할 변수 sum 생성 (범위가 넓기 때문에 int가 아닌 long으로 생성)
5. 응시자의 수가 감독관이 감시할 수 있는 응시자의 수보다 많다면 sum++, a[i] - b의 값에서 c로 나누었을 때 0이라면 (a[i] - b) / c의 값만큼 sum 증가, 그렇지 않다면 (a[i] - b) / c + 1만큼 sum 증가
6. 만약 응시자의 수가 감독관이 감시할 수 있는 응시자의 수보다 작거나 같다면 sum++
7. 계산된 sum 출력
리팩토링
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
long sum = 0;
for (int i = 0; i < n; i++) {
sum++;
int ad = a[i] - b; // Assistant Director
if (ad > 0) {
sum += (ad / c);
if (ad % c != 0) sum++;
}
}
System.out.println(sum);
}
}
위에 있는 코드 설명 4번까지 동일
5. 무조건 각 시험장마다 총 감독관 1명은 배치하기 때문에 sum++
6. 변수 ad(Assistant Director)를 생성하고 a[i] - b 값을 저장
7. 만약 ad가 0보다 크다면 sum에 (ad /c) 값을 증가, 만약 ad % c != 0이라면 sum++
8. 계산된 sum 출력
'알고리즘' 카테고리의 다른 글
[백준] | JAVA, 자바 | 1247번 - 부호 (0) | 2024.06.24 |
---|---|
[백준] | JAVA, 자바 | 13458번 - 싸이클 (0) | 2024.06.23 |
[백준] | JAVA, 자바 | 2292번 - 벌집 (0) | 2024.06.19 |
[백준] | JAVA, 자바 | 2506번 - 점수계산 (0) | 2024.06.19 |
[백준] | JAVA, 자바 | 2609번 - 최대공약수와 최소공배수 (0) | 2024.06.18 |