문제 : boj13458
필요 알고리즘 개념
- 사칙연산
- 나누기! 나머지! 덧셈뺄셈!
※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.
풀이
N개의 시험장이 있을 시, 총감독관은 무조건 한명씩 있어야 하니 일단 N명의 감독관은 확정이다. 이후 N개의 시험장에 대해, 'Ai-B'를 C로 나눈 수 만큼의 부감독관이 필요하다. 그리고, 'Ai-B'가 C로 나누어떨어지지 않는다면 한명이 더 필요하다. 위에 말한걸 구현해주면 된다!
예를들어서
3
3 4 5
2 2
를 보자.
최종 출력할 답이 sum이라 할 시, 일단 sum=3 이다(총감독관 수).
그럼 N개의 시험장에 남은 인원수는 각각 1,2,3명이고, 각각 C로 나눈 수는 0,1,1 / 각각 C로 나눈 나머지는 1,0,1 이므로 각각 1, 1, 2를 더해주게 되어 sum=3+1+1+2 = 7이 된다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
long sum = n;
for (int i = 0; i < n; i++) {
int cur = arr[i] - b;
if (cur <= 0) continue;
sum+=cur/c + (cur%c==0?0:1);
}
System.out.println(sum);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 1977 - 완전제곱수 (java) (0) | 2022.08.21 |
---|---|
[자바] 백준 10162 - 전자레인지 (java) (0) | 2022.08.21 |
[자바] 백준 1715 - 카드 정렬하기 (java) (0) | 2022.08.21 |
[자바] 백준 14495 - 피보나치 비스무리한 수열 (java) (0) | 2022.08.20 |
[자바] 백준 23827 - 수열 (Easy) (java) (0) | 2022.08.19 |
댓글