본문 바로가기

CS ﹒ Algorithm/Baekjoon

JAVA백준 문제풀이 (7) 2839:설탕 배달

 

드디어 처음으로 접하는 실버 문제다.

근데 지금까지 내가 풀어본 백준 문제 중에 제일 쉬웠다. 티어의 기준이 뭐지..?

 

 

나는 반복문으로 단순 무식하게 풀었지만 설탕이 1개일 때부터 38개일 때까지 각각 설탕이 몇 봉지씩 필요한지 표로 정리한 뒤 규칙성을 찾아내서 깔끔하게 푸는 방법이 있다.

당연히 시간복잡도가 O(1)이기 때문에 처리 속도가 가장 빠른 풀이 방법이다.

모범 답안을 보고 싶다면 참고하자. (https://st-lab.tistory.com/72)

 

 

다시 나의 풀이로 돌아가서, 최소한의 움직임으로 설탕을 모두 배달하고 싶다면 당연히 5kg 설탕 포대를 많이 옮기고 3kg 설탕 포대를 적게 옮길 수록 유리하다.

따라서 일단 5를 입력값에 최대한 근사치로 곱하고, 나머지를 3으로 채우는 방식으로 답을 구한다.

 

 

코드 작성할 때도 생각했지만 블로그에 쓰고보니 정말 너무 별거 없이 단순 무식하게 푼 것 같다..

내 답안 말고 모범 답안에서 배우도록 하자..

 

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int sugarBeDelivered = scanner.nextInt();
        int result = -1; // result가 input값과 같아지는 순간이 오지 않는다면 -1
        int smallSugar = 0;
        int bigSugar = 0;

        outer : for (int i=0; smallSugar<sugarBeDelivered; i++) {
            smallSugar = 3 * i;
            bigSugar = 0;
            for (int j=0; bigSugar<sugarBeDelivered; j++) {
                bigSugar = 5 * j;
                if ( smallSugar + bigSugar == sugarBeDelivered ) {
                    result = i + j;
                    break outer;
                }
            }
        }
        System.out.println(result);
    }
}

 

 

그래도 일단 처음 접해본 실버 문제를 수월하게 풀어서 기분이 좋다 : )