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

[๋ฐฐ์—ด] ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ด€๋ จ ๋ฌธ์ œ ๋น„ํŠธ์—ฐ์‚ฐ์œผ๋กœ ํ’€๊ธฐ :: ์ฝ”๋“œ์ž๋ชฝ

by ๐ŸŒปโ™š 2019. 11. 22.

๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ

๋ฐฐ์—ด์ด ์ฃผ์–ด์กŒ์„๋•Œ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž. ์•„๋ž˜ ๊ธฐ๋ณธ ๋ฌธ์ œ๋ฅผ ์„ค๋ช… ๋ฐ ์ฝ”๋“œ์ƒ˜ํ”Œ์„ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ๋จผ์ € ํ’€์–ด๋ณด์ž.
 

๊ธฐ๋ณธ ๋ฌธ์ œ

{1, 2, 3, 4, -1, -5}
์œ„ ๋ฐฐ์—ด์—์„œ ํ™€์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์„ ๋ชจ๋‘ ์ถœ๋ ฅ ํ•˜์‹œ์˜ค.
 
 
๊ฐ„๋‹จํ•ด ๋ณด์ด์ง€๋งŒ ๋น„ํŠธ์—ฐ์‚ฐ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฉด ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ค์šด ๋ฌธ์ œ์ด๋‹ค.
์œ„ ๋ฌธ์ œ๋ฅผ ์™„์ „ํƒ์ƒ‰ ํ˜น์€ ๋ฐฐ์—ด์˜ ์œ„์น˜๋ฅผ ์ด์šฉํ•ด์„œ ํ’€๊ฒ ๋‹ค๊ณ  ์ ‘๊ทผํ–ˆ์„๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์™„์ „ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€๋ ค๊ณ  ํ•˜๋‹ค๋ณด๋‹ˆ for๋ฌธ์„ ์ค‘์ฒฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด์ด ์ปค์งˆ์ˆ˜๋ก ํšจ์œจ๋„ ๋–จ์–ด์ง€๊ณ  ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ œ๊ณฑ์œผ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋ฐฐ์—ด์˜ ์œ„์น˜๋ฅผ ์ด์šฉํ•ด์„œ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•˜๋‹ค๋ณด๋‹ˆ 0๊ณผ 1์„ ์ด์šฉํ•˜์—ฌ ์ž๋ฆฌ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฅด๊ฒŒ ๋ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
์œ„์˜ ๋ฌธ์ œ ์ฒ˜๋Ÿผ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์—์„œ๋Š” ๋น„ํŠธ์—ฐ์‚ฐ์„ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.
 

ํ’€์ด ์ฝ”๋“œ

import java.util.Arrays;

public class PartElements {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, -1, -5};
        // ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜
        for (int i = 1; i < (1 << array.length); i++) {
            int[] temp = new int[array.length]; // ์ž„์‹œ ๋ถ€๋ถ„ ์ง‘ํ•ฉ
            int count = 0; // ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ํฌ๊ธฐ
            boolean isOdd = true; // ํ™€์ˆ˜ ์—ฌ๋ถ€ ํ™•์ธ
            // ๋ถ€๋ถ„์ง‘ํ•ฉ ์ƒ์„ฑ
            for (int j = 0; j < array.length; j++) {
                if ((i & (1 << j)) != 0) {
                    if (array[j] % 2 == 0) {
                        isOdd = false;
                    }else{
                        temp[count++] = array[j];
                    }
                }
            }
            // ์ถœ๋ ฅ
            if (isOdd) System.out.println(Arrays.toString(Arrays.copyOf(temp,count)));
        }
    }
}
 
 

 

์„ค๋ช…

๋น„ํŠธ์—ฐ์‚ฐ์„ ์ด์šฉํ•œ ๋ฌธ์ œํ’€์ด๋Š” ๋ฐฐ์—ด์˜ ์œ„์น˜๋ฅผ 2์ง„์ˆ˜ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜์—ฌ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
๋น„ํŠธ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๊ธ€์„ ํ†ตํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.
 
7
for (int i = 1; i < (1 << array.length); i++) {
๋ชจ๋“  ๋ถ€๋ถ„ ์ง‘ํ•ฉ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธ ํ•˜๊ธฐ for๋ฌธ์œผ๋กœ ํ™•์ธํ•œ๋‹ค. i์˜ ๋ฒ”์œ„๋Š” 1 ~ 63๊นŒ์ง€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
 
8 ~ 10
int[] temp = new int[array.length]; // ์ž„์‹œ ๋ถ€๋ถ„ ์ง‘ํ•ฉ
int count = 0; // ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ํฌ๊ธฐ
boolean isOdd = true; // ํ™€์ˆ˜ ์—ฌ๋ถ€ ํ™•์ธ
์ถ”์ถœํ•œ ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ์ž„์‹œ ๋ฐฐ์—ด ์ƒ์„ฑํ•˜๊ณ  ๋‚˜์ค‘์— ์ƒ์„ฑํ•œ ๋ฐฐ์—ด์„ ํ•œ๋ฒˆ ๋” ์ˆ˜์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋กœ ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜๋ฅผ ์ž„์‹œ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
 
12 ~ 20
for (int j = 0; j < array.length; j++) {
     if ((i & (1 << j)) != 0) {
         if (array[j] % 2 == 0) {
            isOdd = false;
        }else{
            temp[count++] = array[j];
        }
    }
}
์ด ๋ถ€๋ถ„์ด ์ด๋ฒˆ ํ’€์ด์—์„œ์˜ ํ•ต์‹ฌ์ด๋‹ค.
i์˜ ์ˆซ์ž์™€ for๋ฌธ์„ ์ด์šฉํ•ด์„œ 0 ~ 5๊นŒ์ง€ ๊ฐ ์ž์˜ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.
if ((i & (1 << j)) != 0) { ์˜ if๊ตฌ๋ฌธ์—์„œi ์™€ (1 << j) ์˜ & ๋น„๊ต๊ฐ€ ํ•˜๋Š” ์ผ์„ ํ‘œ๋กœ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.
i๋Š” 1 ~ 63์˜ ๋ฐ˜๋ณต๋ฌธ์ด๊ณ  j๋Š” 0 ~ 5๊นŒ์ง€์˜ ๋ฐ˜๋ณต๋ฌธ์ž…๋‹ˆ๋‹ค.
 
i์˜ ๋น„ํŠธ์€ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ 5์ž๋ฆฌ๋กœ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.
i i์˜ ๋น„ํŠธ๊ฐ’ (1 << j)  i & (1 << j)  i & (1 << j)์˜ ๊ฐ’
1 000001 0 000001 000001 1
1 000001 1 000010 000000 0
1 000001  2 000100  000000 0
1 000001  3 001000  000000 
1 000001  4 010000  000000 
000001  5 100000  000000 
000010  000001  000000
000010  000010  000010 
000010  2 000100 000000  0
000010  3 001000  000000 
000010  4 010000  000000 
000010  5 100000  000000 
...
63 111111 000001  000001 
63 111111  000010  000010 
63  111111  000100  000100 
63  111111  001000  001000 
63  111111  010000  010000  16 
63  111111  100000  100000  32 

 

์œ„ ํ‘œ์™€ ๊ฐ™์ด i & (1 << j) ๊ฐ’์ด 0์ด ์•„๋‹๋•Œ if๋ฌธ ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ๋” ํ–ˆ๋‹ค. ์ฆ‰, 1~63๊นŒ์ง€ ์ด์ง„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‚˜๋จธ์ง€ ํ™€์ˆ˜๋งŒ ๊ฑธ๋Ÿฌ์ฃผ๋Š” ๋กœ์ง์„ ํ•ด๋‹น if๋ฌธ์•ˆ์— ์ถ”๊ฐ€์ ์œผ๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

22

if (isOdd) System.out.println(Arrays.toString(Arrays.copyOf(temp,count)));

๊ธฐ์กด์— temp๋ผ๋Š” ๋ฐฐ์—ด์„ array๋ฐฐ์—ด์˜ ํฌ๊ธฐ ๊ทธ๋Œ€๋กœ ์ƒ์„ฑํ•ด์ฃผ์—ˆ๋‹ค. ํ™€์ˆ˜๋งŒ ๋”ฐ๋กœ ๋ฝ‘์•„๋ƒˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋จธ์ง€ ์ž๋ฆฌ์—๋Š” 0์ด ์ฑ„์›Œ์กŒ์„ ๊ฒƒ์ด๋‹ค. 0์„ ๋ชจ๋‘ ์‚ญ์ œํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ๋ฝ‘์•„๋‚ธ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ ๋งŒํผ๋งŒ ๋ฐฐ์—ด ๋ณต์‚ฌ๋ฅผ ํ•ด์ฃผ์—ˆ๋‹ค.

 

๊ฒฐ๊ณผ

 

 

๋น„ํŠธ์—ฐ์‚ฐ์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•˜๋‚˜ ๋” ํ’€์–ด๋ณด์ž.

 

๋ณ€ํ˜• ๋ฌธ์ œ : ํ™ฉ๊ธˆ๋–ก๋ณถ์ด๊ฐ€ ๋จน๊ณ ์‹ถ์–ด์š”

์ž๋ชฝ์ดˆ๋“ฑํ•™๊ต 3ํ•™๋…„ 1๋ฐ˜ ํ•™์ƒ๋“ค์€ ๋งค์ผ ์šฉ๋ˆ์„ ๋ฐ›๋Š”๋‹ค. {์ž๋ชฝ, ๋ฐ”๋‚˜๋‚˜, ์• ํ”Œ๋ง๊ณ , ๋ฉœ๋ก , ์˜ค๋ Œ์ง€, ์ฒด๋ฆฌ, ์ŠคํŠธ๋กœ๋ฒ ๋ฆฌ, ํ‚ค์œ„, ๋ฆฌ์น˜}๋Š”
๊ฐ๊ฐ {15000, 2000, 10000, 7000, 15000, 1000, 2000, 4000, 5000}์›์”ฉ ๋ฐ›๋Š”๋‹ค. 3ํ•™๋…„ 1๋ฐ˜ ํ•™์ƒ๋“ค์€ ํ™ฉ๊ธˆ๋ถ„์‹์—์„œ ํŒ๋งคํ•˜๋Š” ํ™ฉ๊ธˆ ๋–ก๋ณถ์ด๋ฅผ ๋จน๊ธฐ์œ„ํ•ด ๊ทธ๋ฃน์„ ๋ชจ์ง‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ™ฉ๊ธˆ ๋–ก๋ณถ์ด๋Š” 30000์›์ž…๋‹ˆ๋‹ค. 3๋ช… ์ดํ•˜์˜ ๊ทธ๋ฃน์œผ๋กœ ํ™ฉ๊ธˆ๋–ก๋ณถ์ด๋ฅผ ์‚ฌ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฃน์„ ๋ชจ๋‘ ์ถœ๋ ฅ ํ•˜์‹œ์˜ค.
 

ํ’€์ด ์ฝ”๋“œ

import java.util.Arrays;

public class Gold {
    public static void main(String[] args) {
        String[] names = {"์ž๋ชฝ", "๋ฐ”๋‚˜๋‚˜", "์• ํ”Œ๋ง๊ณ ", "๋ฉœ๋ก ", "์˜ค๋ Œ์ง€", "์ฒด๋ฆฌ", "์ŠคํŠธ๋กœ๋ฒ ๋ฆฌ", "ํ‚ค์œ„", "๋ฆฌ์น˜"};
        int[] array = {15000, 2000, 10000, 7000, 15000, 1000, 2000, 4000, 5000};

        for (int i = 1; i < (1 << array.length); i++) {
            String[] temp = new String[array.length];
            int count = 0;
            int sum = 0;
            for (int j = 0; j < array.length; j++) {
                if ((i & (1 << j)) != 0) {
                    sum += array[j];
                    temp[count++] = names[j];
                }
            }
            String[] resultArr = Arrays.copyOf(temp, count);
            if (sum >= 30000 && resultArr.length <=3) System.out.println(Arrays.toString(resultArr));
        }
    }
}
 
 
 

๊ฒฐ๊ณผ

 

 

๋Œ“๊ธ€