코딩테스트/백준

[백준 JAVA] 2839 - 설탕 배달

kittae 2024. 12. 6. 20:06

생각보다 생각을 많이 한 문제인 것 같다.

 

브루트포스 문제이기 때문에 해당 알고리즘만을 사용해야된다는 강박에 시달려 해당 알고리즘 생각에 지연이 생겼다.

 

주어지는 N의 수가 매우 짧기 때문에 시간 제한과 메모리 제한은 상관없다고 판단했다!

 

내가 생각한 로직은 이렇다.

3키로 or 5키로

먼저 5키로로 다 나누고, 만약에 %3이 안되면, +5한다음 %나누기.
안되면 -1 되면 기존 로직 구현

 

[최종 코드]

import java.io.*;
import java.util.*;

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());

        int count = 0;

        if (n / 5 != 0) {
            count += n / 5;
            n = n % 5;
        }

        while (n != 0) {

            if ((count == 0 && n == 4) || (count == 0 && n == 7)) {
                count = -1;
                break;
            }

            if (n / 3 != 0) {
                count += n / 3;
                n = n % 3;
            }

            else {
                n += 5;
                count--;
            }
        }

        System.out.println(count);
    }
}

 

배운점

나는 항상 해당 문제를 풀고 다른 사람의 문제를 확인한다. 확실히 다른 사람의 문제를 푸는 것을 보면 수학적 접근을 많이 적용해서 그런지 매우 간단하고 짧은 코드를 쓰는 걸 볼 수 있다. 나도 본받아서 더 깔끔한 코드를 만들어야겠다고 생각했다!

'코딩테스트 > 백준' 카테고리의 다른 글

[백준 JAVA] 2587 - 대표값2  (0) 2024.12.08
[백준 JAVA] 2750 - 수 정렬하기  (0) 2024.12.08
[백준 JAVA] 2798 - 블랙잭  (2) 2024.12.05
[백준 JAVA] 1929 - 소수 구하기  (0) 2024.12.04
[백준 JAVA] 1978 - 소수 찾기  (0) 2024.12.04