๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 2798 ๋ธ”๋ž™์žญ

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 10.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/2798

  • N์žฅ์˜ ์นด๋“œ์— ์จ์ ธ ์žˆ๋Š” ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, M์„ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ M์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์šด ์นด๋“œ 3์žฅ์˜ ํ•ฉ์„ ๊ตฌํ•ด ์ถœ๋ ฅํ•˜์‹œ์˜ค.
  • ์ฒซ์งธ ์ค„์— ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N(3 ≤ N ≤ 100)๊ณผ M(10 ≤ M ≤ 300,000)์ด ์ฃผ์–ด์ง„๋‹ค.
  • ๋‘˜์งธ ์ค„์—๋Š” ์นด๋“œ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ์ด ๊ฐ’์€ 100,000์„ ๋„˜์ง€ ์•Š๋Š” ์–‘์˜ ์ •์ˆ˜์ด๋‹ค.
  • ํ•ฉ์ด M์„ ๋„˜์ง€ ์•Š๋Š” ์นด๋“œ 3์žฅ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.
  • ์ฒซ์งธ ์ค„์— M์„ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ M์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์šด ์นด๋“œ 3์žฅ์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.

์•„์ด๋””์–ด

  • ์นด๋“œ ์„ธ์žฅ์˜ ํ•ฉ์„ ๊ตฌํ–ˆ์„ ๋•Œ, ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋Š”๋ฐ, ๊ทธ ํ•ฉ์ด ๊ฒน์น  ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ์ค‘๋ณต ์ˆซ์ž๊ฐ€ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” set์„ ํ™œ์šฉํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
  • ์นด๋“œ ์„ธ์žฅ์˜ ์กฐํ•ฉ์€ ์žฌ๊ท€๋กœ ๊ตฌํ•˜๋ฉด ๋˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ•˜์˜€๋‹ค. 

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • ์ผ๋‹จ... ์žฌ๊ท€๊ฐ€ ๋„ˆ๋ฌด ์˜ค๋žœ๋งŒ์ด๋ผ... ๋ฐฉ๋ฒ•์ด ์ƒ๊ฐ์ด ์•ˆ๋‚˜์„œ ๋งŽ์ด ํ—ค๋งธ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋ฒˆ ๊ธฐํšŒ์— ์ œ๋Œ€๋กœ ๋‹ค์‹œ ์ˆ™์ง€๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค...
  • ๊ทธ๋ฆฌ๊ณ  ๋˜ ์˜ค๋ž˜๊ฑธ๋ฆฐ ์ด์œ ๊ฐ€ ์žˆ๋‹ค.. ๋ฌธ์ œ๋ฅผ ๋˜ ์ œ๋Œ€๋กœ ์•ˆ์ฝ๊ณ  ํ’€์—ˆ๋‹ค...๋ถ„๋ช… ์„ธ์žฅ์˜ ํ•ฉ์ด M๋ณด๋‹ค ์ž‘์•„์•ผ๋œ๋‹ค๊ณ  ๋ฌธ์ œ์— ์ ํ˜€์žˆ๋Š”๋ฐ... ๊ทธ๊ฑธ ๋ฌด์‹œํ•˜๊ณ  Math.abs(M - ์„ธ์žฅ์˜ ์นด๋“œ ํ•ฉ) ์ด๋Ÿฐ์‹์œผ๋กœ ํ’€์—ˆ์—ˆ๋‹ค...์‰ฌ์šด๋ฌธ์ œ์ง€๋งŒ ์ •๋ง ์˜ค๋ž˜๊ฑธ๋ฆฐ ๋ฌธ์ œ์˜€๋‹ค...ใ… ใ… 
  • ๊ทธ๋ฆฌ๊ณ  ์ด์ œ ๋ณด๋‹ˆ๊นŒ ๊ตณ์ด ๋ฐฐ์—ด์— ์ €์žฅ์•ˆํ•˜๊ณ  ์žฌ๊ท€ ๋Œ๋ ค์„œ ์นด๋“œ 3๊ฐœ์˜ ํ•ฉ์„ ๊ตฌํ• ๋•Œ๋งˆ๋‹ค ์ตœ์†Ÿ๊ฐ’์ด๋ž‘ ๋น„๊ตํ•ด์„œ ๊ฐฑ์‹ ํ–ˆ์œผ๋ฉด ์†๋„๊ฐ€ ๋” ๋นจ๋ž์„ํ…๋ฐ...๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.. ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์ฐธ๊ณ ํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ๊ฒ ๋‹ค...

'๋งž์•˜์Šต๋‹ˆ๋‹ค'๋ฅผ ์œ„ํ•œ ํ—˜๋‚œํ•œ ์—ฌ์ •... (๊ทธ๋ƒฅ 3์ค‘ for๋ฌธ์œผ๋กœ ํ’€๊ป„ ๊ทธ๋žฌ๋‚˜...)
์†”์งํžˆ ํ‹€๋ฆฐ๊ฒŒ 3๋ฒˆ ๋„˜์–ด๊ฐ€๋ฉด์„œ๋ถ€ํ„ฐ ์งœ์ฆ์ด ๋‚˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค... ๋ถ„๋ฐœํ•˜์ž...ใ…œใ…œ

์ฝ”๋“œ

import java.io.*;
import java.lang.reflect.Array;
import java.util.*;

public class BOJ2798 {

    // ์นด๋“œ ํ•ฉ์ด ์ค‘๋ณต๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ค‘๋ณต๊ฐ’์ด ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” set์„ ์‚ฌ์šฉ
    static Set<Integer> cards_sum = new HashSet<>();
    static int cards_num[];
    static int N;
    static int arr[] = new int[3];

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());

        // ์นด๋“œ์˜ ๊ฐœ์ˆ˜
        N = Integer.parseInt(st.nextToken());
        // ๋งŒ๋“ค์–ด์•ผ๋˜๋Š” ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์šด ์ˆ˜
        int M = Integer.parseInt(st.nextToken());
        // ๊ฒฐ๊ณผ๊ฐ’
        int result = 0;

        // ์นด๋“œ ์ˆซ์ž ์ €์žฅํ•  ๋ฐฐ์—ด
        cards_num = new int[N];

        StringTokenizer st2 = new StringTokenizer(br.readLine());

        for(int i = 0; i < N; i++){
            int c = Integer.parseInt(st2.nextToken());

            // ์นด๋“œ ๋ฒˆํ˜ธ ์ €์žฅ
            cards_num[i] = c;
        }

        cards(0, 0);

        // ์ฐจ์ด ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜
        int min = Integer.MAX_VALUE;

        // set์—๋Š” ์ˆœ์„œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋‹ค์‹œ ๋ฐฐ์—ด๋กœ ์ „ํ™˜
        int sumArr[] = new int[cards_sum.size()];

        int idx = 0;

        // ๋ฐฐ์—ด๋กœ ์ „ํ™˜
        for(int i : cards_sum){
            sumArr[idx] = i;
            idx = idx + 1;
        }

        // ์กฐํ•ฉํ•˜์—ฌ ํ•ฉ์„ ๊ตฌํ•œ ์นด๋“œ ๊ฐ’ ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ๊ฐ’ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ฐ˜๋ณต
        for(int i = 0; i < sumArr.length; i++){
            // M์„ ๋„˜์ง€ ์•Š์•„์•ผ ํ•˜๋ฏ€๋กœ
            if(M >= sumArr[i]){
                if(min > (M - sumArr[i])){
                    result = sumArr[i];

                    min = M - sumArr[i];
                }
            }
        }

        System.out.println(result);
    }

    public static void cards(int n, int m){
        // ์นด๋“œ ์„ธ๊ฐœ๊ฐ€ ์กฐํ•ฉ์ด ๋์„ ๊ฒฝ์šฐ,
        if(n == 3){
            // ํ•ด๋‹น ์นด๋“œ 3๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋”ํ•จ
            cards_sum.add(arr[0] + arr[1] + arr[2]);
        }
        else{
            // ์ค‘๋ณต๋œ ๊ฐ’์ด ๋“ค์–ด๊ฐ€์ง€ ์•Š๊ธฐ ์œ„ํ•ด i = m
            for(int i = m; i < N; i++){
                // ์นด๋“œ 3๊ฐœ๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๋ฐฐ์—ด์— ์นด๋“œ ํ•œ๊ฐœ๋ฅผ ๋„ฃ์Œ
                arr[n] = cards_num[i];
                // ํ•œ๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐ”์œผ๋ฏ€๋กœ ๊นŠ์ด + 1
                n = n + 1;
                // ์„ ํƒํ•œ ๋‹ค์Œ์นด๋“œ๋ถ€ํ„ฐ ์กฐํ•ฉ์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ + 1
                // ๋‹ค์Œ ์นด๋“œ ์กฐํ•ฉํ•˜๋Ÿฌ๊ฐ
                cards(n, i + 1);
                // ๋‹ค๋ฅธ ์นด๋“œ๋„ ์กฐํ•ฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊นŠ์ด ์ดˆ๊ธฐํ™”
                n = n - 1;
            }
        }
    }
}



'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] BOJ 1259 ํŒฐ๋ฆฐ๋“œ๋กฌ์ˆ˜  (0) 2024.07.11
[Java] BOJ 15829 Hashing  (2) 2024.07.11
[Java] BOJ 2292 ๋ฒŒ์ง‘  (0) 2024.07.10
[Java] BOJ 2231 ๋ถ„ํ•ดํ•ฉ  (0) 2024.07.10
[Java] BOJ 1978 ์†Œ์ˆ˜ ์ฐพ๊ธฐ  (0) 2024.07.09