본문 바로가기

Coding_Exam::/백준::

[백준] 2839번 : 설탕배달

import java.util.Scanner;


 public class Main {

public static void main(String [] args) {

int N=0, C=0, T=0;                              // 변수 선언 N = 설탕무게, C = 자루수, 

                                                                      // T = 3kg 자루 수 만큼의 무게를 뺀 설탕무게

        Scanner sc = new Scanner(System.in);             // 값을 입력 받기 위해 스캐너 사용선언

        N = sc.nextInt();                                         // 입력 받은 값을 변수 N에 설정

        T=N;

        if(N>=3&&N<=5000)                                 // 문제의 설탕 무게 범위 설정

        {

        for(int i=0;i<N;i++)                            // 무게 만큼 루프 반복

        {

        T = N-(3*i);                              // T = 전체 무게 - (3KG * 루프카운터) 에 설정

        if(T%5==0&&T>=0){                 // T를 5로 나누어 나머지가 0인지를 확인

        C = i + (T/5);                   // 자루 수 = 루프카운터 + 무게/5

        break;                            // 루프 종료

        }

        else                                       // T의 나머지가 0이 아닐 시

        {

        C = -1;                           // 정확하게 나누어 떨어지지 않으면 -1을 설정

        }

        }

        System.out.println(C);                         // 자루 수 출력

        }

        else System.out.println(-1);                  // 지정 된 범위 값을 넘어선 경우

        }

 }  



이 문제는 설탕을 최소한의 자루 수로 가지고 가는 것이 목적이다.


따라서 3Kg자루 수를 적게 만들 수록 총 자루 수는 적어진다!!


그래서 나는 3Kg자루를 0개에서 부터 1개씩 늘려나가면서 (3Kg * 루프카운터) 만큼 무게를 뺀 T를 5로 나누어

나머지가 0이 되는 값을 찾도록 하였다.


예) 21Kg의 설탕이 있다면

루프 1회 : T = N(21) - 3 * i(1)

T(18) % 5 = 3


if문 조건을 만족하지 못하였기 때문에 -1을 설정하고 다음 루프 실행


루프 2회 : T = N(21) - 3 * i(2)

T(15) % 5 = 0


조건을 만족 했으므로 3Kg자루 수 + 남은 무게의 5Kg 자루 수를 구한 후 종료









이 글을 보고서는 이해가 잘 되지 않을 거 같다............

설명하기란 참 어렵구나.....

죄송해요...........

혹시나 좀 더 개선사항이 보이신다면 가르쳐주세요 >3<

그럼 이만~

 따라서