문제 출처: https://www.acmicpc.net/problem/30802
팀원: 예지, 준희, 소정
문제
참가자 n명에게 웰컴키트로 티셔츠 1장, 펜 1자루씩 나눠주려 한다.
티셔츠와 펜을 각각 몇 묶음 주문해야 하는가?
티셔츠 | 펜 | |
종류 | 사이즈 6종 | 1종 |
주문단위 | 같은 사이즈 t장(1묶음) | p자루(1묶음), 1자루 |
조건 | 티셔츠는 남아도 ok, 부족하면 x | 남으면x, 부족해도x, 정확히 참가자 수만큼 |
문제 | 티셔츠 최소 몇 묶음 주문? | 펜 최대 몇 묶음 주문? 한 자루씩은 몇 개 주문? |
- 예제 입출력
예제 입력 | 설명 |
23 | 참가자 수 n명 |
3 1 4 1 5 9 | 6가지 사이즈 별 인원수 (크기 6인 배열에 저장) |
5 7 | 티셔츠 주문단위 t장, 펜 주문단위 p자루 |
예제 출력 | 설명 |
7 | 티셔츠 최소 7 묶음 주문 (S, M, L, XL, XXL 사이즈 티셔츠를 1묶음씩 구매하고 XXXL 사이즈 티셔츠를 2묶음 구매. 1+1+1+1+2=7) |
3 2 | 펜 최대 3묶음 주문, 펜 낱개로 2개 주문 |
풀이
펜
- 펜이 좀 더 쉬우니 펜을 먼저 한다.
- 참가자 수에 딱 맞아야 하므로 몫과 나머지를 이용한다.
참가자 수 / p자루 = 몫( 묶음 주문 수) | 23 / 7 ⇒ 3 (int끼리 계산은 결과도 int) |
참가자 수 % p자루 = 나머지(낱개 주문 수) | 23 % 7 ⇒ 2 |
p * 펜 묶음 주문 수 + 낱개 주문수 = 참가자 수 | 7 * 3 + 2 =23 |
티셔츠
- 사이즈별 인원수를 티셔츠 주문단위 t로 나눈다. ⇒ 계산할 때 실수로 형변환해서 결과도 실수로 만들어 소수점 아래를 살린다.
- 그 비율을 올림하여 사이즈별 묶음 수를 구한다 ⇒ Math.ceil() 소수점 첫째자리에서 올림
- 사이즈별 묶음 수를 누적해 전체 티셔츠 묶음 수를 구한다.
코드
import java.util.*;
public class Q30802 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 입력 받기
int people = sc.nextInt(); // 참가자 수
int[] sizeArr = new int[6]; // 6가지 티셔츠 사이즈별 신청자 수
for (int i = 0; i < sizeArr.length; i++) {
sizeArr[i] = sc.nextInt();
}
int t = sc.nextInt(); // 티셔츠 주문단위 t장
int p = sc.nextInt(); // 펜 주문단위 p자루
// 결과를 저장할 변수들
int tBundles = 0; // 티셔츠 몇 묶음인가
int pBundles = 0; // 펜 몇 묶음인가
int aPen = 0; // 펜이 한자루씩 몇 개인가
// 티셔츠 - 남아도 괜찮-----------------------------------------------
// Math.ceil() 소수점 첫째자리에서 올림
for (int i : sizeArr) {
tBundles += Math.ceil(i/(double)t);
// System.out.println(Math.ceil(i/(double)t));
}
// 펜 - 사람 수에 딱 맞게
// 몫과 나머지
pBundles = people / p;
aPen = people % p;
// 결과 출력----------------------------------------------------------
System.out.println(tBundles);
System.out.println(pBundles + " " + aPen);
}
}
참고자료
기본타입 형변환에 대해서
Java 형변환(문자형,정수형,실수형)
자바 Integer클래스의 parseInt함수와 valueOf 함수를 사용하여 변환이 가능하다.String num = "10";int i_num = Integer.parseInt(num); // 첫번째 방식int i_num2 = Integer.valueOf(num);
velog.io
Math.ceil() 올림 메서드에 대해서
JAVA) 자바 Math.ceil 자세히 알아보기(올림, 소수점 버리기)
페이징 처리를 구현하다가 공식중에 Math.ceil이 있는데, 좀 이해가 가지 않고 헷갈렸다. Math.ceil이 올림인건 알지만, 소수점으로 계산했을때, 정수로 했을때 등등이 달랐기 때문에 어려웠다. 결과
luanaeun.tistory.com
'Team 발표 과제' 카테고리의 다른 글
백준 (자바)문제 7785번 "회사에 있는 사람" (0) | 2024.10.03 |
---|---|
1417. 국회의원 선거 (0) | 2024.10.02 |
No 2775번 부녀회장이 될테야 (0) | 2024.10.02 |
백준 2839번 설탕배달 (1) | 2024.10.01 |
백준 java 1356번 유진수 (0) | 2024.09.30 |