바이러스 검사
문제
추천해요
바이러스의 확산을 막기 위해 총 n개의 식당에 있는 고객들의 체온을 측정하고자 합니다. 체온을 측정하는 검사자는 검사팀장과 검사팀원으로 나뉘어집니다. 팀장과 팀원이 검사할 수 있는 고객의 수가 다르며, 한 가게당 팀장은 오직 한 명, 팀원은 여러명 있을 수 있습니다. 하지만 가게당 팀장 한 명은 무조건 필요합니다. 가게에 검사팀원만 존재하는 경우는 있을 수 없습니다. 팀장이든 팀원이든 담당한 가게에 대해서만 검사합니다.
n개의 식당 고객들의 체온을 측정하기 위해 필요한 검사자 수의 최솟값을 구하는 프로그램을 작성해주세요.
입력 형식
첫째 줄에는 식당의 수 n이 주어집니다.
둘째 줄에는 각 식당에 있는 고객의 수가 공백을 사이에 두고 주어집니다.
셋째줄에는 검사팀장이 검사할 수 있는 최대 고객 수와 검사팀원이 검사할 수 있는 최대 고객 수가 공백을 사이에 두고 주어집니다.
1 ≤ n ≤ 1,000,000
1 ≤ (각 식당에 있는 고객의 수) ≤ 1,000,000
1 ≤ (팀장 혹은 팀원 한 명이 검사 가능한 최대 고객의 수) ≤ 1,000,000
출력 형식
n개의 식당의 고객들을 모두 검사하기 위한 검사자의 최소의 수를 출력하세요
풀이
매 식당마다 총 몇영의 검사 인원이 필요한지 확인하면 된다.
이 때 주의할 점은 범위를 잘 생각해야 한다. 만약 식당이 1,000,000개 있고 식당마다 고객이 1,000,000이 있을 때, 팀장과 팀원이 1명씩만 검사할 수 있다면
int형의 범위를 벗어나게 된다.
코드
import java.util.*;
import java.io.*;
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[] arr = new int[n];
for(int i = 0; i < n; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
int leader = Integer.parseInt(st.nextToken());
float team = Integer.parseInt(st.nextToken());
long ans = n;
for(int i = 0; i < n; i++){
arr[i] -= leader;
if(arr[i] > 0){
// System.out.println(arr[i] / team);
ans += Math.ceil(arr[i] / team);
}
}
System.out.println(ans);
}
}
'알고리즘' 카테고리의 다른 글
15922 아우으 우아으이야!! (Java) (0) | 2022.05.23 |
---|---|
[코드트리] 2048 게임 (0) | 2022.05.22 |
1700 멀티탭 스케줄링 (Java) (0) | 2022.05.20 |
1806 부분합 (Java) (0) | 2022.05.19 |
14719 빗물 (Java) (0) | 2022.05.16 |