본문 바로가기
Team 발표 과제

백준 30802번 웰컴 키트

by yejiiiii 2024. 10. 2.

 

문제 출처: 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

 

 

티셔츠

  1. 사이즈별 인원수를 티셔츠 주문단위 t로 나눈다. ⇒ 계산할 때 실수로 형변환해서 결과도 실수로 만들어 소수점 아래를 살린다.
  2. 그 비율을 올림하여 사이즈별 묶음 수를 구한다 ⇒ Math.ceil() 소수점 첫째자리에서 올림
  3. 사이즈별 묶음 수를 누적해 전체 티셔츠 묶음 수를 구한다.

 


코드

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