[백준 BOJ] 5532번 방학 숙제 (C++/cpp)

2022. 10. 31. 16:31PS (Program Solving)/BOJ (백준)

문제 설명

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

 

5532번: 방학 숙제

한 줄에 하나씩 총 다섯 줄에 걸쳐 L, A, B, C, D가 주어진다. (2 ≤ L ≤ 40, 1 ≤ A, B ≤ 1000, 1 ≤ C, D ≤ 100) 항상 방학 숙제를 방학 기간내에 다 할 수 있는 경우만 입력으로 주어진다.

www.acmicpc.net

백준 BOJ 5532번 방학 숙제 문제 사진

 

접근 방법 - 사칙연산에 대한 기본 문제

백준의 5532번 문제는 사칙연산을 이용하여 해결할 수 있는 간단한 문제이다.

해당 문제는, 상근이가 방학기간 동안 주어진 방학 숙제를 다 하고 놀 수 있는 최댓값을 구하여 출력해야 하는 문제이다.

문제의 설명을 보면, 방학 숙제를 하는 기간을 최솟값으로 잡고 연산해야 한다.

입력값으로는 방학 숙제의 양과 상근이가 하루에 할 수 있는 방학 숙제 양이 주어져있는데, 이를 이용하여 사칙연산을 수행하면 된다.

크게 거창한 연산이 필요한 것은 아니기 때문에, 이 문제의 풀이 원리만 파악했다면 비교적 쉽게 해결할 수 있을 것이다.

혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면, 아래의 설명과 코드를 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 방학 일수(l)와 방학 숙제의 양(a, b), 상근이가 하루에 할 수 있는 방학 숙제의 양(c, d)을 순차적으로 입력받는다.

 

2) 국어 숙제를 하는 데에 걸리는 날의 최솟값을 먼저 구해본다.

- 만약 a가 c에 나누어 떨어진다면, 딱 그 몫만큼 시간이 걸린다는 것을 의미한다. 따라서, 그 몫을 a에 저장하도록 한다.

- 다만 a가 c에 나누어 떨어지지 않는다면, 그 몫에 하루를 더한 시간만큼 걸린다는 것을 의미한다. 따라서, 그 몫에 1을 더한 값을 a에 저장하도록 한다.

 

3) 다음은, 수학 숙제를 하는 데에 걸리는 날의 최솟값을 구해본다.

- 만약, b가 d에 나누어 떨어진다면, 딱 그 몫만큼 시간이 걸린다는 것을 의미한다. 따라서, 그 몫을 b에 저장하도록 한다.

- 다만 b가 d에 나누어 떨어지지 않는다면, 그 몫에 하루를 더한 시간만큼 걸린다는 것을 의미한다. 따라서, 그 몫에 1을 더한 값을 b에 저장하도록 한다.

 

4) m이라는 변수를 선언하여, a와 b 둘 중 더 큰 값을 초기값으로 저장한다.

(국어 숙제와 수학 숙제를 "모두" 끝내야 상근이가 놀 수 있기 때문에, 걸리는 총시간은 둘 중 최댓값으로 생각해야 한다.)

 

5) 총 방학 기간인 l에 m을 뺀 값이 곧 정답이다. 따라서, 해당 값을 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 5532번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int l, a, b, c, d;
	cin >> l >> a >> b >> c >> d;

	if (a % c == 0) { a /= c; }
	else { a = a / c + 1; }

	if (b % d == 0) { b /= d; }
	else { b = b / d + 1; }

	int m = max(a, b);
	cout << l - m << endl;
}

 

제출 결과

백준 BOJ 5532번 방학 숙제 문제 C++ 제출 결과

(2022.10.19 백준 5532번 문제 제출 결과)

반응형