알고리즘
[codetree] 바이러스 검사 Java 풀이
빠르게 핵심만
2024. 6. 5. 21:02
접근
1. 각 가게에 대한 고객 수를 입력 받습니다.
2. 팀장과 팀원이 검사할 수 있는 최대 고객 수를 입력 받습니다.
3. 각 가게에 대해 다음을 수행합니다.
- 가게 당 팀장 한 명은 무조건 필요하므로 minCount를 1 증가시킵니다.
- 남은 고객이 있는 경우, 팀원이 검사를 실시합니다.
- 팀원이 검사할 수 있는 최대 고객 수를 초과하는 경우, 추가적인 팀원이 필요하므로 이를 고려하여 minCount를 계산합니다.
4. 결과를 출력합니다.
풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
// 입력 처리
int n = Integer.parseInt(br.readLine());
int[] customer = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
customer[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
int ldr = Integer.parseInt(st.nextToken());
int mbr = Integer.parseInt(st.nextToken());
long minCount = 0L;
for (int i = 0; i < n; i++) {
// 가게 당 팀장 한 명은 무조건 필요하다.
minCount++;
// 남은 고객이 있는 경우 팀원이 검사를 실시한다.
if (customer[i] - ldr > 0) {
// 정확히 나누어떨어지는 경우라면 몫만큼의 인원이 필요하다.
// 정확히 나누어떨어지지 않는 경우라면 1명이 추가적으로 필요하다.
minCount += (customer[i] - ldr) % mbr == 0 ? (customer[i] - ldr) / mbr : (customer[i] - ldr) / mbr + 1;
}
}
// 결과 출력
System.out.println(minCount);
}
}