본문 바로가기
프로그래밍/백준알고리즘

백준 알고리즘 2839번 문제 - 설탕 배달

by 밍구몬 2019. 8. 1.

 

상근이가 설탕을 배달하는 문제입니다.

최대한 5키로그램으로 채우고 나머지는 3키로로 채워주는데 정확하게 만들 수 없다면 -1을 리턴해야됩니다.

ex) 24kg = 3(3) + 5(3)

     2kg = -1

 

자바

import java .util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner s = new Scanner(System.in);
		short N = s.nextShort();
		int cnt=0;
		
		if(N%5==0) System.out.println(N/5);
		else if(N==4 || N==7){System.out.println(-1);}
		else{
			while(true){
				N-=3;
				cnt++;
				if(N==0){System.out.println(cnt); break;}
				if(N%5==0) {System.out.println(cnt+N/5);break;}
			} 
		}
	}
}

c언어

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

 

저 같은 경우는 N이 5의 약수일 경우 N/5를 바로 출력하도록 하였고, N이 4이거나 7이면 -1을 출력하였습니다.

c언어 예제처럼 while문 안에서 N이 0보다 작을경우 -1을 리턴하여도 되지만

N의 무게를 제대로 채우지 못하는 경우는 N이 1, 2, 4, 7 중 하나일 경우밖에 없습니다.

N은 3이상의 자연수기 때문에 4거나 7이면 -1을 출력하였습니다.

 

while문에서 N을 3씩 감소시키며 cnt를 1씩 증가시키고, N이 0일경우 3의 약수이므로 cnt만 출력해주었습니다.

N 나누기 5의 나머지가 0일경우에는 5의 배수라는 뜻이기 때문에 현재 N의 값/5 + cnt를 하여 출력을 해주었습니다.

 

역시 c언어가 빠르네요 ..