• toc {:toc}

문제 ν™•μΈν•˜κΈ°

풀이

그리디 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λŠ” 문제둜, μ΅œμ†Œ 개수의 봉지λ₯Ό λ°°λ‹¬ν•΄μ€˜μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 5 둜 λ¨Όμ € λ‚˜λˆ„κ³  3 으둜 λ‚˜λˆŒ 수 μžˆλŠ”μ§€λ₯Ό ν™•μΈν•œλ‹€. 큰 수둜 λ‚˜λˆ„λŠ” 것이 μ•„λ‹ˆλΌ 5 둜 λ‚˜λˆ„λŠ” 것이기 λ•Œλ¬Έμ— 1, 2, 3, 4 일 λ•Œμ˜ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό λ‚˜λˆ„μ–΄ μ§„ν–‰ν–ˆλ‹€.

예λ₯Ό λ“€λ©΄ 6 이 μž…λ ₯으둜 λ“€μ–΄μ˜¨ 경우 5 둜 λ‚˜λˆ„μ–΄ λ‚˜λ¨Έμ§€κ°€ 1 이 λ‚˜μ˜€κ³  이 λ•Œ, 3 으둜 λ‚˜λˆŒ 수 μ—†κΈ° λ•Œλ¬Έμ— 5 둜 λ‚˜λˆˆ λͺ«μ„ 1 쀄이고 3 으둜 λ‚˜λˆ μ€€λ‹€. 이런 μ‹μœΌλ‘œ μΌ€μ΄μŠ€λ₯Ό λ‚˜λˆ„μ–΄ μƒκ°ν–ˆλ‹€.

 
#include <bits/stdc++.h>
using namespace std;
 
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
 
    int N, temp, five, three = 0;
 
    cin >> N;
 
    temp = N;
 
    five = N / 5;
    N = N % 5;
 
    if(temp == 4 || temp == 7){
        cout << -1 << '\n';
        exit(0);
    }
    if(N == 1){
        five -= 1;
        three = 2;
    }
    else if(N == 2){
        five -= 2;
        three = 4;
    }
    else if(N == 3){
        three = 1;
    }
    else if(N == 4){
        five -= 1;
        three = 3;
    }
 
    cout << five+three << '\n';
    
 
    return 0;
}

μœ„ ν’€μ΄λŠ” λ‹¨μˆœνžˆ μΌ€μ΄μŠ€λ₯Ό λ‚˜λˆ μ„œ ν‘Ό ν’€μ΄μ˜€μ§€λ§Œ, μΌ€μ΄μŠ€κ°€ λ§Žμ€ κ²½μš°μ—λŠ” 일일이 λ‚˜λˆŒ 수 μ—†λ‹€. λ•Œλ¬Έμ— λ°˜λ³΅λ¬Έμ„ μ΄μš©ν•΄μ„œ ν’€μ΄ν•˜λŠ” 방법도 μžˆλ‹€. κ²°κ΅­ μš°λ¦¬λŠ” μ΅œλŒ€ν•œ λ§Žμ€ 개수의 5kg 섀탕 봉지λ₯Ό μ œκ³΅ν•΄μ•Ό ν•œλ‹€. λ•Œλ¬Έμ— 전체λ₯Ό 5 둜 λ‚˜λˆ„μ—ˆμ„ λ•Œ λ”± λ–¨μ–΄μ§€λŠ” κ²½μš°κ°€ μ΅œλŒ€ν•œ 5kg 으둜 μ œκ³΅ν•  수 μžˆλŠ” 방법이닀. λ§Œμ•½, 5 둜 λ‚˜λˆ„μ—ˆμ„ λ•Œ λ”± λ–¨μ–΄μ§€μ§€ μ•ŠλŠ”λ‹€λ©΄, 3kg 으둜 μ œκ³΅ν•˜λŠ” 방법밖에 μ—†κΈ° λ•Œλ¬Έμ— μ „μ²΄μ—μ„œ 3 을 1 νšŒμ”© λΉΌμ£Όκ³  5 둜 λ‚˜λˆ„λŠ” 과정을 λ°˜λ³΅ν•œλ‹€.

#include <iostream>
 
using namespace std;
 
int N;
int main() {
	cin >> N;
	int ans = 0;
	while (N>=0) {
		if (N % 5 == 0) {	//κ°€μž₯ 큰 수둜 λ‚˜λˆ„λŠ”κ²Œ κ°€μž₯ μž‘μ€μˆ˜λž‘ μ„žμ–΄μ„œ λ‚˜λˆ„λŠ” 것보닀 유리
			ans += (N / 5);	//λ‚˜λˆˆ λͺ«μ„ λ”ν•œ 것이 μ •λ‹΅
			cout << ans << endl;
			return 0;
		}
		N -= 3;	//3kg을 λΉΌκ³  
		ans++;	//κ°€λ°© ν•˜λ‚˜ λŠ˜μ–΄λ‚¨
	}
	cout << -1 << endl;
}