[Boj_2961] ๋„์˜์ด๊ฐ€ ๋งŒ๋“  ๋ง›์žˆ๋Š” ์Œ์‹

๐Ÿ“Ž ๋ฌธ์ œ ๋งํฌ

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

 

2961๋ฒˆ: ๋„์˜์ด๊ฐ€ ๋งŒ๋“  ๋ง›์žˆ๋Š” ์Œ์‹

์ฒซ์งธ ์ค„์— ์žฌ๋ฃŒ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 10)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ ์ค„์—๋Š” ๊ทธ ์žฌ๋ฃŒ์˜ ์‹ ๋ง›๊ณผ ์“ด๋ง›์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ๋ชจ๋“  ์žฌ๋ฃŒ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์š”๋ฆฌ๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ, ๊ทธ ์š”๋ฆฌ์˜ ์‹ ๋ง›๊ณผ ์“ด๋ง›์€

www.acmicpc.net

 

โ–ธ ๋ฌธ์ œ

๋„์˜์ด๋Š” ์งœํŒŒ๊ตฌ๋ฆฌ ์š”๋ฆฌ์‚ฌ๋กœ ๋ช…์„ฑ์„ ๋‚ ๋ ธ์—ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์ด์ „์— ์—†์—ˆ๋˜ ์ƒˆ๋กœ์šด ์š”๋ฆฌ์— ๋„์ „์„ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์ง€๊ธˆ ๋„์˜์ด์˜ ์•ž์—๋Š” ์žฌ๋ฃŒ๊ฐ€ N๊ฐœ ์žˆ๋‹ค. ๋„์˜์ด๋Š” ๊ฐ ์žฌ๋ฃŒ์˜ ์‹ ๋ง› S์™€ ์“ด๋ง› B๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ์žฌ๋ฃŒ๋ฅผ ์ด์šฉํ•ด์„œ ์š”๋ฆฌํ•  ๋•Œ, ๊ทธ ์Œ์‹์˜ ์‹ ๋ง›์€ ์‚ฌ์šฉํ•œ ์žฌ๋ฃŒ์˜ ์‹ ๋ง›์˜ ๊ณฑ์ด๊ณ , ์“ด๋ง›์€ ํ•ฉ์ด๋‹ค.

์‹œ๊ฑฐ๋‚˜ ์“ด ์Œ์‹์„ ์ข‹์•„ํ•˜๋Š” ์‚ฌ๋žŒ์€ ๋งŽ์ง€ ์•Š๋‹ค. ๋„์˜์ด๋Š” ์žฌ๋ฃŒ๋ฅผ ์ ์ ˆํžˆ ์„ž์–ด์„œ ์š”๋ฆฌ์˜ ์‹ ๋ง›๊ณผ ์“ด๋ง›์˜ ์ฐจ์ด๋ฅผ ์ž‘๊ฒŒ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค. ๋˜, ๋ฌผ์„ ์š”๋ฆฌ๋ผ๊ณ  ํ•  ์ˆ˜๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์žฌ๋ฃŒ๋Š” ์ ์–ด๋„ ํ•˜๋‚˜ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์žฌ๋ฃŒ์˜ ์‹ ๋ง›๊ณผ ์“ด๋ง›์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์‹ ๋ง›๊ณผ ์“ด๋ง›์˜ ์ฐจ์ด๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ์š”๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

โ–ธ ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์žฌ๋ฃŒ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 10)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ ์ค„์—๋Š” ๊ทธ ์žฌ๋ฃŒ์˜ ์‹ ๋ง›๊ณผ ์“ด๋ง›์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ๋ชจ๋“  ์žฌ๋ฃŒ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์š”๋ฆฌ๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ, ๊ทธ ์š”๋ฆฌ์˜ ์‹ ๋ง›๊ณผ ์“ด๋ง›์€ ๋ชจ๋‘ 1,000,000,000๋ณด๋‹ค ์ž‘์€ ์–‘์˜ ์ •์ˆ˜์ด๋‹ค.

 

โ–ธ ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์‹ ๋ง›๊ณผ ์“ด๋ง›์˜ ์ฐจ์ด๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ์š”๋ฆฌ์˜ ์ฐจ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด

  • ๐Ÿฅˆ ๋ฌธ์ œ ๋ ˆ๋ฒจ : ์‹ค๋ฒ„ 2
  • ๐Ÿ””  ๋ฌธ์ œ ์œ ํ˜• : ๋ธŒ๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋น„ํŠธ๋งˆ์Šคํ‚น, ๋ฐฑํŠธ๋ž˜ํ‚น
  • ๐Ÿ’ฌ  ํ’€์ด ์–ธ์–ด : JAVA

 

๐Ÿค” ๋ฌธ์ œ ํ’€์ด

  • ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์ด์šฉํ•œ ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.
  • ๋ชจ๋“  ์žฌ๋ฃŒ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๊ตฌํ•œ ๋’ค, ์žฌ๋ฃŒ๋ฅผ ํ•˜๋‚˜๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ๋•Œ๋ฅผ ์ œ์™ธํ•œ ์‹ ๋ง›์˜ ๊ณฑ๊ณผ ์“ด๋ง›์˜ ํ•ฉ์˜ ์ฐจ์ด ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ” ๋ถ€๋ถ„์ง‘ํ•ฉ์ด๋ž€(Subset) ?

  • ํ•œ ์ง‘ํ•ฉ์˜ ์›์†Œ๋“ค๋กœ๋งŒ ๊ตฌ์„ฑํ•œ ์ง‘ํ•ฉ์„ ๋งํ•œ๋‹ค.
    • ์ง‘ํ•ฉ์˜ ์›์†Œ๊ฐ€ ์ด n๊ฐœ์ผ ๋•Œ, ๊ณต์ง‘ํ•ฉ์„ ํฌํ•จํ•œ ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๊ฐœ์ˆ˜๋Š” 2^n๊ฐœ๋‹ค.
    • ์ฆ‰, ๊ฐ๊ฐ์˜ ์›์†Œ๋“ค์„ ๋ถ€๋ถ„์ง‘ํ•ฉ์— ํฌํ•จ์‹œํ‚ค๊ฑฐ๋‚˜ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ๋ชจ๋“  ์›์†Œ์— ์ ์šฉํ•œ ๊ฒƒ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜์™€ ๊ฐ™๋‹ค.
  • ์žฌ๊ท€๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๊ตฌํ˜„ํ•  ๋•Œ๋Š”
  • ์•„๋ž˜์™€ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ๋ชจ๋‘ ํ™•์ธํ•œ ํ›„ ํ˜„์žฌ ์ธ๋ฑ์Šค๊ฐ€ n์ด ๋˜์—ˆ์„ ๋•Œ ์ถœ๋ ฅํ•œ๋‹ค.
    • ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ
    • ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

 

โœ” ์ตœ์ข… ์ฝ”๋“œ

๋ฉ”๋ชจ๋ฆฌ : 11632 KB
์‹œ๊ฐ„ : 76 ms
import java.io.*;
import java.util.StringTokenizer;

public class Main {
    static int n ;
    static int[][] taste;
    static boolean[] checked;
    static int ans = Integer.MAX_VALUE; // ์‹ ๋ง›๊ณผ ์“ด๋ง›์˜ ์ตœ์†Ÿ๊ฐ’
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        n = Integer.parseInt(br.readLine()); // ์žฌ๋ฃŒ์˜ ๊ฐœ์ˆ˜

        taste = new int[n][2]; // ์‹ ๋ง›๊ณผ ์“ด๋ง›์„ ์ €์žฅ ํ•  ๋ฐฐ์—ด
        checked = new boolean[n]; // ์‚ฌ์šฉํ•œ ์‹ ๋ง›๊ณผ ์“ด๋ง›์„ ์ฒดํฌ ํ•  ๋ฐฉ๋ฌธ๋ฐฐ์—ด
        // ์‹ ๋ง› ์“ด๋ง› ์ž…๋ ฅ
        StringTokenizer st;
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            taste[i][0] = Integer.parseInt(st.nextToken());
            taste[i][1] = Integer.parseInt(st.nextToken());
        }
        // ์ธ๋ฑ์Šค, ์‚ฌ์šฉํ•œ ์žฌ๋ฃŒ์˜ ๊ฐœ์ˆ˜, ์‹ ๋ง›(*), ์“ด๋ง›(+)
        dfs(0, 0, 1, 0);
        bw.append(ans + "\n");
        bw.flush();
        bw.close();
        br.close();
    }

    private static void dfs(int idx, int material, int mulSour, int sumBitter) {
        if (idx == n) { // ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ์™„์„ฑํ–ˆ๋‹ค๋ฉด
            if (material != 0) { // ์žฌ๋ฃŒ๋Š” ์ ์–ด๋„ ํ•˜๋‚˜ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
                ans = Math.min(ans, Math.abs(mulSour-sumBitter));
            }
            return;
        }
        
        // ๋ถ€๋ถ„์ง‘ํ•ฉ ๋งŒ๋“ค๊ธฐ
        // ํ˜„์žฌ ์ธ๋ฑ์Šค ํฌํ•จ
        checked[idx] = true;
        dfs(idx+1, material+1, mulSour*taste[idx][0], sumBitter+taste[idx][1]);
        // ํ˜„์žฌ ์ธ๋ฑ์Šค ํฌํ•จ ์•ˆํ•จ
        checked[idx] = false;
        dfs(idx+1, material, mulSour, sumBitter);
    }
}


 

 

๐Ÿ“ ํ•จ๊ป˜ ํ’€์–ด๋ณด๋ฉด ์ข‹์€ ๋ฐฑ์ค€ ๋ฌธ์ œ

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

[Boj_11279] ์ตœ๋Œ€ ํž™  (0) 2023.11.13
[Boj_11286] ์ ˆ๋Œ“๊ฐ’ ํž™  (0) 2023.11.13
[Boj_1927] ์ตœ์†Œ ํž™  (0) 2023.11.13
[Boj_9251] LCS  (1) 2023.11.10
[Boj_2167] 2์ฐจ์› ๋ฐฐ์—ด์˜ ํ•ฉ  (1) 2023.11.04