알고리즘/백준

[Java] 백준 25496 장신구 명장 임스 - 실버5

fladi 2023. 7. 11. 05:46
728x90

 

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

 

25496번: 장신구 명장 임스

첫 번째 줄에 정수 $P$와 정수 $N$이 공백으로 구분되어 주어진다. ($1 \le P \le 200$, $1 \le N \le 1\,000$) 두 번째 줄에는 정수 $A_1, A_2, \dots, A_N$이 공백으로 구분되어 주어진다. ($1 \le A_i \le 200$)

www.acmicpc.net

 

 

문제를 읽어보면 그리디 문제라는 걸 쉽게 알 수 있다.

 

 

 

나의코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception {

        int result = 0;

        //입력받기 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(bf.readLine().strip());
        int fatigue = Integer.parseInt(st.nextToken());
        Integer.parseInt(st.nextToken());

        String line = bf.readLine().strip();
        String[] arr = line.split(" ");
        List<Integer> intArr = new ArrayList<>();
        for (String str : arr) {
            intArr.add(Integer.parseInt(str));
        }
        //입력 끝 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

        while (fatigue < 200 && intArr.size() > 0) {
            Integer minFatigue = Collections.min(intArr);
            intArr.remove(minFatigue);

            fatigue += minFatigue;
            result += 1;
        }

        System.out.println(result);
    }
}
  • 초기 피로도와 장신구를 만들 때 피로도 등을 입력으로 받는다
  • 피로도가 200 미만이고 남은 장신구 개수가 0보다 클 때 while문을 수행한다
    • 장신구 중 가장 피로도가 적게드는 장신구를 뽑고 제거한다
    • 현재 피로도에 해당 피로도를 더하고
    • result 를 1 증가시켜준다

 

백준은 자바 11만 있어서 stream을 사용했더니 알 수 없는 문법이라고 나왔다. 그래서 for문을 사용하여 작성했다.

array가 0인 경우를 고려하지 않아 런타임 에러가 많이 났다. (NoSuchElement)

 

 

 

 

챗 지피티 코드

import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        // P와 N 입력 받기
        StringTokenizer st = new StringTokenizer(br.readLine());
        int p = Integer.parseInt(st.nextToken());
        int n = Integer.parseInt(st.nextToken());

        // 각 장신구의 피로도 입력 받기
        st = new StringTokenizer(br.readLine());
        int[] fatigue = new int[n];
        for (int i = 0; i < n; i++) {
            fatigue[i] = Integer.parseInt(st.nextToken());
        }
        
        // 제작 가능한 장신구 개수 구하기
        int maxJewelryCount = 0;
        int currentFatigue = 0;
        for (int i = 0; i < n; i++) {
            currentFatigue += fatigue[i];
            if (currentFatigue < p) {
                maxJewelryCount++;
            } else {
                break;
            }
        }

        // 결과 출력
        System.out.println(maxJewelryCount);
    }
}

chat gpt가 어떻게 푸는지 궁금하여 한 번 물어봤다.

 

 

 

 

 

 

 

728x90