Post

[BOJ 30802] 웰컴 키트

Baekjoon Online Judge 30802(Java 11)
[웰컴 키트] 문제 풀이

[BOJ 30802] 웰컴 키트

-> 문제 바로가기



시간 제한메모리 제한제출정답맞힌 사람정답 비율
0.1 초1024 MB33273176661639953.159%

문제


  • 2024년 2월 3일 개최 예정인 온사이트 그랜드 아레나에서는 참가자들에게 티셔츠 한 장과 펜 한 자루가 포함된 웰컴 키트를 나눠줄 예정입니다. 키트를 제작하는 업체는 다음과 같은 조건으로만 주문이 가능합니다.

    • 티셔츠는 S, M, L, XL, XXL, 그리고 XXXL의 6가지 사이즈가 있습니다. 티셔츠는 같은 사이즈의 $T$장 묶음으로만 주문할 수 있습니다.
    • 펜은 한 종류로, $P$자루씩 묶음으로 주문하거나 한 자루씩 주문할 수 있습니다.
  • 총 $N$명의 참가자 중 S, M, L, XL, XXL, XXXL 사이즈의 티셔츠를 신청한 사람은 각각 $S, M, L, XL, XXL, XXXL$명입니다. 티셔츠는 남아도 되지만 부족해서는 안 되고 신청한 사이즈대로 나눠주어야 합니다. 펜은 남거나 부족해서는 안 되고 정확히 참가자 수만큼 준비되어야 합니다.

  • 티셔츠를 $T$장씩 최소 몇 묶음 주문해야 하는지, 그리고 펜을 $P$자루씩 최대 몇 묶음 주문할 수 있고, 그 때 펜을 한 자루씩 몇 개 주문하는지 구하세요.


입력


  • 첫 줄에 참가자의 수 $N$이 주어집니다. $(1 \le N \le 10^9)$ 

  • 둘째 줄에 티셔츠 사이즈별 신청자의 수 $S, M, L, XL, XXL, XXXL$이 공백으로 구분되어 주어집니다. $(0 \le S, M, L, XL, XXL, XXXL \le N;$ $S + M + L + XL + XXL + XXXL = N)$ 

  • 셋째 줄에 정수 티셔츠와 펜의 묶음 수를 의미하는 정수 $T$와 $P$가 공백으로 구분되어 주어집니다. $(2 \le T, P \le 10^9)$


출력


  • 첫 줄에 티셔츠를 $T$장씩 최소 몇 묶음 주문해야 하는지 출력하세요.

  • 다음 줄에 펜을 $P$자루씩 최대 몇 묶음 주문할 수 있는지와, 그 때 펜을 한 자루씩 몇 개 주문하는지 구하세요.


예제


1
2
3
4
// 입력
23
3 1 4 1 5 9
5 7
1
2
3
// 출력
7
3 2
  • S, M, L, XL, XXL 사이즈 티셔츠를 $1$묶음씩 구매하고 XXXL 사이즈 티셔츠를 $2$묶음 구매합니다.


출처



알고리즘 분류








제출



내 제출


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import java.io.*;
import java.util.*;

public class Main {

    public static void solution() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine()); // 참가자의 수

        int[] sizes = new int[6];
        StringTokenizer st1 = new StringTokenizer(br.readLine(), " "); // 사이즈별 신청자 수

        for (int i = 0; i < sizes.length; i++) {
            sizes[i] = Integer.parseInt(st1.nextToken());
        }

        StringTokenizer st2 = new StringTokenizer(br.readLine(), " ");
        int t = Integer.parseInt(st2.nextToken()); // 티셔츠 묶음 수
        int p = Integer.parseInt(st2.nextToken()); // 펜 묶음 수

        int answer1 = 0;
        for (int i = 0; i < sizes.length; i++) {
            answer1 += (int)Math.ceil((double)sizes[i] / t); // Math 클래스의 ceil 메서드를 사용하여 올림을 함
            // 반드시 ceil 메서드를 사용하는 경우 아큐먼트로 double를 보내주어야 한다.
            // 참조 : https://luanaeun.tistory.com/208 

            //bw.write(i + "번째 계산 : " + answer1 + "\n");
        }

        int answer2 = n / p;
        int answer3 = n % p;

        bw.write(answer1 + "\n");
        bw.write(answer2 + " " + answer3);

        bw.flush();
        bw.close();
        br.close();
    }


    public static void main(String[] args) throws IOException {
        solution();
    }
}


런타임메모리
128 ms16148 KB


Reference


This post is licensed under CC BY 4.0 by the author.