알고리즘

[CodeTree] 바이러스 검사 Java 풀이

빠르게 핵심만 2024. 2. 23. 18:04
 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

풀이

각 식당별로 필요한 최소 검사자의 수를 구해 전부 더해주면 됩니다.

 

각 식당에는 팀장 한 명은 무조건 필요하므로, 식당에 있는 고객의 수에서 팀장이 검사할 수 있는 고객의 수를 뺀 나머지 고객을 모두 검사하기 위해 필요한 팀원의 수를 구하면 됩니다.

 

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	static int n;
	static int[] customers;
	static int leaderCapacity, memberCapacity;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		n = Integer.parseInt(br.readLine());
		customers = new int[n];

		StringTokenizer st = new StringTokenizer(br.readLine());
		for (int i = 0; i < n; i++) {
			customers[i] = Integer.parseInt(st.nextToken());
		}

		st = new StringTokenizer(br.readLine());
		leaderCapacity = Integer.parseInt(st.nextToken()); // 검사 팀장이 검사할 수 있는 최대 고객 수
		memberCapacity = Integer.parseInt(st.nextToken()); // 검사 팀원이 검사할 수 있는 최대 고객 수

		long minCount = 0; // 검사자의 최소의 수
		for (int i = 0; i < n; i++) {
			// 검사 팀장은 꼭 한 명 필요하다.
			minCount++;
			// 필요한 검사 팀원을 더한다.
			minCount += requiredMemberNum(customers[i] - leaderCapacity);
		}
		System.out.println(minCount);
	}

	static int requiredMemberNum(int customerNum) {
		// 남은 고객이 없다면 검사 팀원은 필요 없다.
		if (customerNum <= 0) {
			return 0;
		}

		// 정확히 나누어떨어지는 경우 몫만큼의 검사 팀원이 필요하다.
		if (customerNum % memberCapacity == 0) {
			return customerNum / memberCapacity;
		}
		// 정확히 나누어떨어지지 않는 경우 1명이 추가적으로 더 필요하다.
		return customerNum / memberCapacity + 1;
	}
}
 

Title: 바이러스 검사, Time: 641ms, Memory: 73MB, Status: Passed - CodeTree · jinseoplee/codetree-TILs@1b9733f

jinseoplee committed Feb 23, 2024

github.com