BOJ 문제풀이
백준 30802 c++ 문제 풀이 (웰컴 키트)
koreasunoo
2024. 8. 10. 15:33
SMALL
https://www.acmicpc.net/problem/30802
핵심 전략:
몫, 나머지 연산을 활용
(처음 작성한 코드와 비교하여) 최적화를 한 부분:
처음 구현할 때, 각 티셔츠 사이즈 별로 몫을 구하는 과정을 if문을 사용하여 나머지가 0일 때의 몫과 그 외의 상황에서의 몫을 구하였다. (아래 코드 참고)
for(i = 1; i <= 6; i++){
if (shirt_size[i] % t){
t_shirt += shirt_size[i] / t + 1;
}
else{
t_shirt += shirt_size[i] / t;
}
}
하지만 다른 사람의 코드를 보고 if else 문을 한 줄로 더 효율적인 코드로 대체할 수 있음을 배웠다. 나누려는 수( 위 코드의 경우 변수 t) - 1을 나눠지는 수에 더한 후 t로 나눗셈을 진행해주면 된다 (정답 코드 참고).
정답 코드:
#include <bits/stdc++.h>
#define nl '\n'
using namespace std;
typedef long long ll;
int i, j;
int shirt_size[7];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, t, p;
cin >> n;
for(i = 1; i <= 6; i++){
cin >> shirt_size[i];
}
cin >> t >> p;
int t_shirt = 0;
for(i = 1; i <= 6; i++){
t_shirt += (shirt_size[i] + t - 1) / t; // 최적화를 한 부분
}
cout << t_shirt << nl;
cout << n / p << ' ' << n % p << nl;
return 0;
}
LIST