728x90
SMALL
백준 문제 풀이: 1434 [책 정리]
문제 링크: https://www.acmicpc.net/problem/1434
문제 설명:
책장 n
개의 각 칸의 용량과 책 m
개의 크기가 주어졌을 때, 책들을 책장에 순서대로 넣습니다. 책을 넣고 남는 책장 공간의 크기를 구하는 문제입니다.
문제 해결 코드
// 백준 1434 - 책 정리
#include <iostream>
using namespace std;
int shelf[1001]; // 책장 용량
int books[1001]; // 책 크기
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
cin >> n >> m; // 책장의 칸 수와 책의 수
int remainingSpace = 0; // 남는 책장 공간
for (int i = 0; i < n; i++) {
cin >> shelf[i]; // 책장 용량 입력
remainingSpace += shelf[i]; // 책장의 총 용량
}
for (int i = 0; i < m; i++) {
cin >> books[i]; // 책 크기 입력
}
int j = 0; // 현재 책장 인덱스
for (int i = 0; i < m; i++) {
while (j < n) {
if (shelf[j] >= books[i]) { // 책이 현재 책장에 들어갈 수 있으면
shelf[j] -= books[i]; // 책장 용량 감소
remainingSpace -= books[i]; // 남는 공간 감소
break;
} else {
j++; // 다음 책장으로 이동
}
}
}
cout << remainingSpace << '\n'; // 최종 남는 공간 출력
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명.
- 핵심 알고리즘:
- 책을 순서대로 책장에 넣으며, 책장의 현재 용량과 책의 크기를 비교합니다.
- 책이 들어갈 수 없는 경우, 다음 책장으로 이동합니다.
- 구현 세부사항:
- 책장이 충분하지 않아 책을 모두 넣을 수 없는 경우, 남은 공간은 책이 차지하지 않은 책장의 용량입니다.
- 책장 용량과 책 크기는 각각의 배열로 관리하며, 반복문으로 순차적으로 처리합니다.
- 시간 복잡도 분석:
- 최악의 경우, 모든 책이 모든 책장을 순회하므로 O(n ⋅ m)입니다.
결과
제출 시, 모든 테스트 케이스에 대해 올바른 결과를 출력합니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 수학' 카테고리의 다른 글
백준 3474번 [교수가 된 현우](C++) -yes6686- 티스토리 (0) | 2024.08.16 |
---|---|
백준 8674번 [Tabliczka](C++) -yes6686- 티스토리 (0) | 2024.08.10 |
백준 20363번 [당근 키우기](C++) -yes6686- 티스토리 (0) | 2024.07.27 |
백준 1393번 [음하철도 구구팔](C++) -yes6686- 티스토리 (0) | 2024.07.27 |
백준 23082번 [균형 삼진법](C++) -yes6686- 티스토리 (0) | 2024.07.25 |