본문 바로가기

알고리즘

[코드트리] 바이러스 검사 (Java)

바이러스 검사

문제

추천해요
바이러스의 확산을 막기 위해 총 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