Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/07   »
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
Archives
Today
Total
관리 메뉴

피너클의 it공부방

백준 1817 짐 챙기는 숌 (c++) : 피너클 본문

백준

백준 1817 짐 챙기는 숌 (c++) : 피너클

피너클 2022. 7. 16. 22:10
728x90
반응형

https://www.acmicpc.net/problem/1817

 

1817번: 짐 챙기는 숌

첫째 줄에 책의 개수 N과 박스에 넣을 수 있는 최대 무게 M이 주어진다. N은 0보다 크거나 같고 50보다 작거나 같은 정수이고, M은 1,000보다 작거나 같은 자연수이다. N이 0보다 큰 경우 둘째 줄에 책

www.acmicpc.net

간단한 구현문제다.

cin >> n >> m;
if (n == 0) {
	cout << "0" << endl;
	return 0;
}

n과 m을 입력받은 뒤 n이 0이면 0을 출력하고 바로 프로그램을 종료한다.

for (int i = 0; i < n; i++) cin >> arr[i];
int ans = 0;
int now = 0;

그후 짐의 무게를 입력받고 ans와 now변수를 준비한다.

ans는 정답이고 now는 현재 박스에 넣은 무게다.

for (int i = 0; i < n; i++) {
	if (now + arr[i] <= m) now += arr[i];
	else {
		ans++;
		now = arr[i];
	}
}

모든 무게를 확인하며 만약 현재 박스에 넣은 무게 + 다음 짐의 무게가 m보다 작다면 now에 arr[i]를 더한다.

만약 m보다 크다면 ans++를 하고 now를 arr[i]로 바꾼다. 새로운 박스에 arr[i]부터 넣는다 생각하면 된다.

if (now != 0) ans++;
cout << ans << endl;

반복문이 끝난뒤 now가 0이 아니면 처리하지않은 박스가 있다는 뜻이니 ans++를 해주고 ans를 출력한다.

#include <iostream>

using namespace std;

int n, m;
int arr[51];

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin >> n >> m;
	if (n == 0) {
		cout << "0" << endl;
		return 0;
	}
	for (int i = 0; i < n; i++) cin >> arr[i];
	int ans = 0;
	int now = 0;
	for (int i = 0; i < n; i++) {
		if (now + arr[i] <= m) now += arr[i];
		else {
			ans++;
			now = arr[i];
		}
	}
	if (now != 0) ans++;
	cout << ans << endl;
}

전체코드다.

728x90
반응형
Comments