728x90
SMALL
백준 문제 풀이: 30802 [웰컴 키트]
문제 링크: https://www.acmicpc.net/problem/30802
문제 설명:
총 n
개의 웰컴 키트 재료를 준비하는 데 필요한 최소 작업 수와 작업을 나누는 방법을 계산하는 문제입니다. 작업은 재료를 일정 단위로 나누거나 묶어서 처리하는 방식으로 이루어집니다.
입력:
- 첫 번째 줄에 준비해야 할 재료의 총 개수
n
이 주어집니다. (1 ≤n
≤ 106) - 두 번째 줄에 각 재료의 개수
arr[0] ... arr[5]
가 주어집니다. (1 ≤arr[i]
≤ 106) - 세 번째 줄에 작업 단위
t
와 작업 묶음p
가 주어집니다. (1 ≤t, p
≤ 106)
출력:
- 첫 번째 줄에 필요한 최소 작업 수를 출력합니다.
- 두 번째 줄에
n
개의 재료를p
로 나눈 몫과 나머지를 출력합니다.
문제 해결 코드
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
int arr[6];
for (int i = 0; i < 6; i++) {
cin >> arr[i];
}
int t, p;
cin >> t >> p;
// 최소 작업 수 계산
int minTasks = 0;
for (int i = 0; i < 6; i++) {
minTasks += (arr[i] + t - 1) / t; // 올림하여 작업 수 계산
}
// n을 p로 나눈 몫과 나머지 계산
int maxGroups = n / p;
int remainingItems = n % p;
// 결과 출력
cout << minTasks << '\n';
cout << maxGroups << ' ' << remainingItems << '\n';
return 0;
}
예제
입력:
100
10 20 30 40 50 60
15 25
출력:
30
4 0
입력:
200
50 50 50 50 50 50
10 30
출력:
30
6 20
코드 설명
- 최소 작업 수 계산:
- 각 재료를 작업 단위
t
로 나눌 때, 남는 재료도 하나의 작업으로 처리합니다. - 이를 위해
(arr[i] + t - 1) / t
를 사용해 올림 작업을 구현합니다.
- 각 재료를 작업 단위
- 나누기 결과:
n
을p
로 나눈 몫은 최대 작업 그룹 수를 나타냅니다.n % p
는 작업 그룹에서 남는 재료 수를 나타냅니다.
시간 복잡도
- 최소 작업 계산: O(6) (고정된 크기의 배열)
- 나누기 연산: O(1)
- 전체 시간 복잡도: O(1)
결과
코드는 재료 준비에 필요한 최소 작업 수와 작업 그룹 분할 결과를 정확히 계산합니다. 입력 크기가 고정되어 있어 효율적으로 동작합니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 수학' 카테고리의 다른 글
백준 28702번 [FizzBuzz](C++)-yes6686- 티스토리 (0) | 2024.12.27 |
---|---|
백준 31403번 [A + B - C](C++)-yes6686- 티스토리 (0) | 2024.12.27 |
백준 1629번 [곱셈](C++) -yes6686- 티스토리 (0) | 2024.12.26 |
백준 11659번 [구간 합 구하기 4](C++) -yes6686- 티스토리 (0) | 2024.12.25 |
백준 30031번 [지폐 세기](C++) -yes6686- 티스토리 (0) | 2024.12.25 |