알고리즘/백준 알고리즘

[백준] 2839 - 설탕 배달

TIM_0529 2023. 1. 9. 09:24
반응형
#include <iostream>
using namespace std;

int main() {
    int f=0, t=0, n;
    cin >> n;
	while (n>0)
	{
		if (n % 5 == 0 || (n % 5 == 0 && n % 3 == 0)) {
			n -= 5;
			f++;
		}
		else if (n % 3 == 0) {
			n -= 3;
			t++;
		}
		else if (n > 5)
		{
			n -= 5;
			f++;
		}
		else if (n > 3)
		{
			n -= 3;
			t++;
		}
		if (n < 3&&n!=0) {
			cout << -1;
			break;
		}
		else if (n == 0) {
			cout << f + t << endl;
		}
	}
}

풀이: while 문을 사용해서 조건이 참이면 카운트를 해서 값을 출력하는 방식으로 계산했습니다.

1. 입력된 수가 5로 나누어 떠떨어지거나 3 과 5 모두 나머지가 0이 되는 수가 아니라면 5를 뺍니다.

2. 수가  3으로 나누어 떨어지지만 위 조건을 만족하지 못하면 (else if) 3을 뺍니다.

3. 만약 수가 3보다 작아 더 이상 진행할 수 없으면 -1을 출력하고 반복을 탈출합니다.

4. 입력된 수가 0이 되면 나눴던 프로세스를 모두 더해서 값을 출력합니다.

 

 


다른 사람에 코드

#include<stdio.h>
int main(){
int n,i=0;scanf("%d",&n);
    while((n-3*i)%5)
    {
    	i++;
    	if(3*i>n){printf("-1");return 0;}
    }
    
    printf("%d",(n-3*i)/5+i);
    }

풀이: 나눈 횟수를 카운트 해서 n의 값은 변경하지 않고 n의 3에 배수를 빼고 5로 나머지를 구합니다. 그 수가 0이 되면 반복이 종료가 됩니다. 그 수가 n 보다 커지면 나누어 떨어지지 않는 수이므로 -1을 리턴하고 종료하고 만약 0으로 나누어 떨어진다면 while문이 종료되고 n - 반복한수 *3  / 5+ 반복한 수 를 출력합니다.  

반응형

'알고리즘 > 백준 알고리즘' 카테고리의 다른 글

[백준] 2525 - 오븐 시계  (0) 2023.01.11
[백준] 2884 - 알림시계  (0) 2023.01.10
14681 - 사분면 고르기  (1) 2023.01.08
[백준] 2753 - 윤년  (0) 2023.01.07
[백준] 2775 - 부녀회장이 될테야  (0) 2023.01.06