• [백준_2839] 설탕 배달 ( Greedy )

    2021. 1. 5.

    by. KimBangg

    [1] 문제

    [2] 접근법

    • 1차 접근
      최초에 문제를 봤을 때는, loop를 통해 반복해주면 쉽게 접근할 수 있지 않을까라는 생각을 가졌었다.
      설탕 봉지를 최소한으로 이용하는 것이 목적이기에 주어진 값을 5로 나눈 값과 다시 그 수를 3을 나눈 값을 count에 더하고 만약, 마지막까지 수가 0이 아니라면 그 때는 -1를 출력하는 방식을 생각 했었지만 "런타임 에러"가 발생하였다.
      최근에는 시간 문제를 접하면, Scanner의 문제가 가장 크다고 생각하여 가능하면 BufferedReader를 통해 문제를 풀어보려고 한다. => 시간이 되면 왜 성능이 더 높은가에 대해서도 이야기 해보고자 한다.

     

    • 2차 접근
      런타임이 길어서 나는 에러라면, 어떻게 하면 해결 할 수 있을까? 에 대한 고민 끝에 패턴이 있는지 찾아보기 시작했고, 그 결과 하단과 같은 코드가 나오게 되었다. 사실, 2차 접근에서는 전적으로 나의 힘으로 한 것이 아니기에 개운한 느낌은 나지 않는다! 그래서 이 글을 적으며 복습을 하고자 접근하면서 느꼈던 생각들에 대해서 다시 적어보았다.

    [3] 코드

    import java.io.InputStreamReader;
    import java.io.BufferedReader;
    import java.io.IOException;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int N = Integer.parseInt(br.readLine());
            if (N == 4 || N == 7) { // 4 || 7이 나오면 해결이 X
                System.out.println(-1);
            }
            else if (N % 5 == 0) {
                System.out.println(N / 5);
            }
            else if (N % 5 == 1 || N % 5 == 3) {
                System.out.println((N / 5) + 1);
            }
            else if (N % 5 == 2 || N % 5 == 4) {
                System.out.println((N / 5) + 2);
            }
        }
    }

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

    [백준_1946] 신입사원 (Greedy)  (0) 2021.01.05
    [백준_1541] 잃어버린 괄호 ( Greedy )  (0) 2021.01.05
    [백준_10809] 알파벳 찾기 ( 문자열 )  (0) 2021.01.02
    [백준_2798] 블랙잭  (0) 2020.12.24
    [백준_2309] 일곱난쟁이  (0) 2020.12.24

    댓글