[Bronze III] 웰컴 키트 - 30802
성능 요약
메모리: 14364 KB, 시간: 108 ms
분류
사칙연산, 구현, 수학
제출 일자
2025년 2월 19일 10:08:54
문제 설명
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$자루씩 최대 몇 묶음 주문할 수 있는지와, 그 때 펜을 한 자루씩 몇 개 주문하는지 구하세요.
문제 풀이
간단한 사칙연산과 구현으로 풀었다.
다만, 펜과 관련해서는 문제 내용으로는 이해가 안갔었는데 입력, 출력 부분을 보니 이해할 수 있었다.
입력, 문제를 푸는 부분을 나눠서 구현했다.
티셔츠는 if를 사용해서 묶음으로 나눠떨어지면 그대로 계산했고, 나머지가 있다면 + 1을 추가해줬다.
펜은 그냥 입력받은 P자루를 인원수에 나눠서 몫과 나머지를 출력해주면 된다.
문제 이해하는게 코드를 짜는것보다 오래걸린것 같다..
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N, T, P, sizeCnt = 6;
static int[] size = new int[sizeCnt];
public static void main(String[] args) throws IOException {
input();
shirt();
pen();
}
public static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < sizeCnt; i ++) {
size[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
T = Integer.parseInt(st.nextToken());
P = Integer.parseInt(st.nextToken());
}
public static void shirt() {
int shirtCnt = 0;
for (int i = 0; i < sizeCnt; i ++) {
if (size[i] % T == 0) {
shirtCnt += size[i] / T;
}
else {
shirtCnt += ((size[i] / T) + 1);
}
}
System.out.println(shirtCnt);
}
public static void pen() {
int share = 0, remainder = 0;
share = N / P;
remainder = N % P;
System.out.printf("%d %d", share, remainder);
}
}
코드 풀이
static int N, T, P, sizeCnt = 6;
static int[] size = new int[sizeCnt];
- 참가자 수를 저장할
N
, 티셔츠 묶음을 저장할T
, 펜의 묶음을 저장할P
, 티셔츠 사이즈의 종류를 저장할sizeCnt
변수를 static으로 선언해 어디서나 사용 가능하게 했다. size
는 티셔츠 종류별 신청자 수를 저장할 용도로 배열을 선언했다.
public static void shirt() {
int shirtCnt = 0;
for (int i = 0; i < sizeCnt; i ++) {
if (size[i] % T == 0) {
shirtCnt += size[i] / T;
}
else {
shirtCnt += ((size[i] / T) + 1);
}
}
System.out.println(shirtCnt);
}
shirtCnt
는 최종적으로 티셔츠를 몇 묶음을 주문해야하는지 저장할 변수로 사용했다.- $인원수(N) / 티셔츠 묶음(T) = 몫, 나머지$ 가 나오게 되는데 이를 이용했다.
- 나머지가 0인 경우 몫 그대로 주문 개수를 추가했다.
- 나머지가 존재하는 경우 몫 + 1을 하면 티셔츠가 부족하지 않고 남기 때문에 주문 개수에 몫 + 1을 추가했다.
- 최종적으로 티셔츠 묶음을 출력했다.
public static void pen() {
int share = 0, remainder = 0;
share = N / P;
remainder = N % P;
System.out.printf("%d %d", share, remainder);
}
share
는 몫을,remainder
는 나머지를 저장할 변수로 사용했다.- 펜 출력은 인원수에 대한 묶음을 나눠서 나온 몫과 나머지만 출력하면 되기 때문에 그대로 구현했다.
'백준 문제풀이' 카테고리의 다른 글
[Baekjoon 18110] solved.ac - JAVA (0) | 2025.02.25 |
---|---|
[Baekjoon 28702] FizzBuzz - Java (0) | 2025.02.23 |
[Baekjoon 14719] 빗물- JAVA (0) | 2025.02.10 |
[Baekjoon 16928] 뱀과 사다리 게임 - JAVA (0) | 2025.02.02 |
[Baekjoon 33254] Hurry the Hedgehog - JAVA (0) | 2025.01.31 |