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

'BOJ 문제풀이' 카테고리의 다른 글

백준 30804 c++ 풀이 (과일 탕후루)  (0) 2024.08.11
백준 28702 c++ 문제 풀이 (FizzBuzz)  (0) 2024.08.10
백준 23175번 c++ 풀이  (0) 2021.10.11
백준 1644번 c++ 풀이  (0) 2021.10.10
백준 2003번 c++ 풀이  (0) 2021.10.10