본문 바로가기

알고리즘/백준

[백준] 2839 - 설탕 배달 (JAVA/ 자바)

반응형

2839번 문제(1)
2839번 문제(2)

 

sqld 자격증 공부를 하느라 요즘 코딩테스트 공부에 소홀했다...

 

❗️❗️ 틀린 코드

import java.util.Scanner;

public class Main{
public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int bag = 0;

    if(N % 5 == 0){
        bag = N  / 5;
    }else if(N % 5 != 0){
        int a = N % 5;
        if(a % 3 == 0){
            bag = (N/5) + (a/3);
        }else{
            bag = -1;
        }
    }
    if(N % 3 == 0){
        bag = N / 3;
    }else if(N % 3 != 0){
        int a = N % 3;
        if(a % 5 == 0){
            bag = (N/3) + (a/5);
        }else{
            bag = -1;
        }
    }
    System.out.println(bag);
    }
}

수학적으로 접근할 자신이 없어서 일일히 비교하는 형식으로 풀려고 했었다. 내가 짠 코드는 11kg과 같은 예제를 제대로 해결하지 못했다. 

 

여러 번 시도했으나 해결하지 못해서 결국 다른 분의 코드를 참고하여 해결했다.

https://velog.io/@gayeong39/%EB%B0%B1%EC%A4%80-2839-%EC%84%A4%ED%83%95-%EB%B0%B0%EB%8B%AC

 

백준 2839 설탕 배달 [JAVA]

문제 자체는 간단하게, 봉지는 5KG 봉지와 3KG봉지가 주어지고, 입력받은 설탕의 킬로그램(N)을 어떻게하면 가장 적은 봉지로 담아 배달할 수 있을까?의 문제이다.import java.io.\*;public class Main {}

velog.io

 

Scanner를 이용한 방법

import java.util.Scanner;

public class Main{
public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int bag = 0;

    while(N>0){
        if(N % 5 == 0){
            bag += N / 5;
            break;
        }else{
            N -= 3;
            bag++;
        }
        if(N<0){
            bag = -1;
            break;
        }  
    }

    System.out.println(bag);
    sc.close();

    }
}

 

BufferedReader를 이용한 방법

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

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 bag = 0;

    while(N>0){
        if(N % 5 == 0){
            bag += N / 5;
            break;
        }else{
            N -= 3;
            bag++;
        }
        if(N<0){
            bag = -1;
            break;
        }  
    }
    System.out.println(bag);
    br.close();
    }
}

N의 값을 5로 나눴을 때 0이 되지 않으면 N의 값에서 3을 빼서 다시 나눠보는 식으로 하되, N의 값이 0보다 작게 되면 -1을 출력하게 하는 방식이다. 훨씬 짧은 코드 길이로 이렇게 해낼 수 있다는 것을 보고 난 아직 갈 길이 멀다고 느꼈다...

 

 

그나저나 SQLD 붙었으면 좋겠다...ㅎ

반응형