알고리즘

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

빠르게 핵심만 2024. 6. 5. 21:02
 

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

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

www.codetree.ai

 

접근

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);
	}
}