[BOJ 30802] 웰컴 키트
Baekjoon Online Judge 30802(Java 11)
[웰컴 키트] 문제 풀이
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 0.1 초 | 1024 MB | 33273 | 17666 | 16399 | 53.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 ms | 16148 KB |
