미소를뿌리는감자의 코딩

[백준 2024/01/15] 2839번 본문

코딩 테스트/백준

[백준 2024/01/15] 2839번

미뿌감 2024. 1. 15. 21:45
728x90

오늘은 알고리즘(자바) 개강 날인데,

내가 하려고 했던 백준 풀기를 main으로 진행하는 것 같다.

 

아주.. 아다리가 잘 맞았다.. ㅎㅎㅎ

 

https://www.acmicpc.net/problem/2839

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net

1) 접근 방법

우선 N = 3*x + 5*y 라는 식을 세웠다.

이후, y를 기준으로 중첩된 리스트를 구성할 것을 생각하였다.

y를 기준으로 삼은 것은, y가 최대인 값을 구해야하기 때문에, 정렬할 때 더 편리하게 하기 위함이다.

 

y를 기준으로 0~ N//5 까지 for 반복문을 생성하였다.

 

반복문 안에서는 if, else 문을 이용하여

x = (N-5*y)/3의 값이 실수 인지, 정수 인지에 따라 list에 넣을지 말지를 정해주었다.

 

실수의 경우 -> 봉지의 개수는 정수여야하므로 해당되지 않는다.

 

[[y,x],[y',x'],[y'',x'']] 이런식으로 식을 구성해 나갔다.

 

후보들이 전체 List에 들어가게 된 후,

전체 리스트를 정렬한 후, reverse()를 통해 

y기준으로 내림차순으로 정렬될 수 있도록 하였다.

이후,

list[0][0] + list[0][1] 을 통해 총 봉지의 개수를 계산 해 주었다.

rough draft

 

2) 코드

import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
import java.util.Comparator;
import java.util.Collections;

//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class b2839 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String N = scanner.nextLine();
        int number = Integer.parseInt(N);
        int quotient = number/5;

        List<List<Integer>> total_list = new ArrayList<>();

        for (int i = 0; i <= quotient; i++) {
            int x = (number-(5*i))%3;
            if( x==0 ){
                int xx = (number-(5*i))/3;
                List<Integer> sub_list = new ArrayList<>();
                //sub_list.clear();
                sub_list.add(i);
                sub_list.add(xx);
                total_list.add(sub_list);
                //System.out.println(total_list);
            }
            else{
                continue;
            }
        }
        if (total_list.isEmpty()){
            System.out.println(-1);
        }
        else{
            Collections.sort(total_list, Comparator.comparing((List<Integer> list) -> list.get(0)).reversed());

            int answer = total_list.get(0).get(0) + total_list.get(0).get(1);
            System.out.println(answer);
            }
        }
    }

 

코드 중에서 더 인상적인 부분은 다음과 같았다.

Collections.sort(total_list, Comparator.comparing((List<Integer> list) -> list.get(0)).reversed());

int answer = total_list.get(0).get(0) + total_list.get(0).get(1);

list.get(0)의 경우 0 번째 index를 기준으로 정렬하겠다는 것을 의미한다.

728x90

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

[백준 2024/01/16] 10250번  (0) 2024.01.16
[백준 2024/01/15] 2869번  (0) 2024.01.15
[백준 2024/01/15] 4948번  (0) 2024.01.15
[백준 2024/01/15] 2675번  (1) 2024.01.15
[백준 2024/01/15] 시노시작!  (0) 2024.01.15