๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ ๋Œ€์ฒดํ•˜๊ธฐ

by 1mj 2021. 10. 14.

Q. 0๋ฒˆ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋ฒˆํ˜ธ ๋งค๊ฒจ์ง„ n๊ฐœ์˜ ์›์†Œ ์ค‘ ๋„ค ๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•ด๋ผ.

์˜ˆ๋ฅผ ๋“ค์–ด n์ด 5์ธ ๊ฒฝ์šฐ, 0~4๊นŒ์ง€์˜ ์›์†Œ ์ค‘ ์ฐจ๋ก€๋กœ ๋„ค ๊ฐœ๋ฅผ ๊ณ ๋ฅด๋ฏ€๋กœ (0 1 2 3), (0 1 2 4), (0 1 3 4), (0 2 3 4), (1 2 3 4)์˜ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

 

A1. ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์ฐจ๋ก€๋กœ ๋„ค ๊ฐœ๋ฅผ ๊ณ ๋ฅด๋ฏ€๋กœ 4์ค‘ ์ค‘์ฒฉ for๋ฌธ์„ ์จ์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

class Test {
    public static void main(String[] args) {
        int n = 5; // n์ด 5์ธ ๊ฒฝ์šฐ 0~4๊นŒ์ง€ ์›์†Œ ์ค‘ ์ฐจ๋ก€๋กœ 4๊ฐœ๋ฅผ ๊ณจ๋ผ ์ถœ๋ ฅํ•จ
        
        // ์ฒซ ๋ฒˆ์งธ ์›์†Œ ์„ ํƒ
        for (int i = 0; i < n; i++) {
            // ๋‘ ๋ฒˆ์งธ ์›์†Œ ์„ ํƒ (์ฐจ๋ก€๋Œ€๋กœ ๊ณ ๋ฅด๋ฏ€๋กœ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ณด๋‹ค ์ปค์•ผ ํ•จ)
            for (int j = i + 1; j < n; j++) {
                // ์„ธ ๋ฒˆ์งธ ์›์†Œ ์„ ํƒ (์ฐจ๋ก€๋Œ€๋กœ ๊ณ ๋ฅด๋ฏ€๋กœ ๋‘ ๋ฒˆ์งธ ์›์†Œ๋ณด๋‹ค ์ปค์•ผ ํ•จ)
                for (int k = j + 1; k < n; k++) {
                    // ๋„ค ๋ฒˆ์งธ ์›์†Œ ์„ ํƒ (์ฐจ๋ก€๋Œ€๋กœ ๊ณ ๋ฅด๋ฏ€๋กœ ์„ธ ๋ฒˆ์งธ ์›์†Œ๋ณด๋‹ค ์ปค์•ผ ํ•จ)
                    for (int l = k + 1; l < n; l++) {
                        System.out.println("(" + i + ", " +  j  + ", " + k + ", " + l + ")");
                    }
                }
            }
        }
    }
}

 

์‹คํ–‰๊ฒฐ๊ณผ

ํ•˜์ง€๋งŒ ๊ณจ๋ผ์•ผ ํ•  ์›์†Œ์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์žฌ๊ท€๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋” ์ข‹์€ ๋‹ต์•ˆ์ด ๋  ๊ฒƒ์ด๋‹ค.

์žฌ๊ท€๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋กœ์ง์„ ํ•œ ๋ฒˆ์— ๋– ์˜ฌ๋ฆฌ๊ธฐ ์–ด๋ ต๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋จผ์ € ์ž‘์„ฑํ•ด๋ณด๊ณ , ๋ฐ˜๋ณต๋˜๋Š” ๋ถ€๋ถ„์„ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋„๋ก ๋ณ€๊ฒฝํ•ด๋ณด๋Š” ์—ฐ์Šต์„ ํ•˜๋ฉด ์ƒ๊ฐํ•ด๋‚ด๊ธฐ ์‰ฝ๋‹ค.

 

A2. ์žฌ๊ท€๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์ฐจ๋ก€๋Œ€๋กœ ๊ณ ๋ฅผ ์ˆซ์ž๋ฅผ ์–ด๋””์„œ๋ถ€ํ„ฐ ์–ด๋””๊นŒ์ง€ ๊ณ ๋ฅผ์ง€๋ฅผ ์ง€์ •ํ•ด์„œ ๋ฐ˜๋ณต, ์›์†Œ ๋„ค ๊ฐœ๋ฅผ ์„ ํƒํ•˜๋„๋ก ์žฌ๊ท€ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

import java.util.*;

class Test {
    public static void main(String[] args) {
        pick(5, new ArrayList<>(), 4);
    }
    
    // n: ์ „์ฒด ์›์†Œ ์ˆ˜
    // pickedList: ์ง€๊ธˆ๊นŒ์ง€ ๊ณ ๋ฅธ ์›์†Œ๋“ค
    // toPick: ๋” ๊ณ ๋ฅผ ์›์†Œ ์ˆ˜
    public static void pick(int n, ArrayList<Integer> pickedList, int toPick) {
        // ๋„ค ๊ฐœ๋ฅผ ๋ชจ๋‘ ๊ณจ๋ž์„ ๊ฒฝ์šฐ ์ถœ๋ ฅ ํ›„ ์žฌ๊ท€ ํƒˆ์ถœ
        // (ํ•˜์ง€๋งŒ for๋ฌธ์— ์˜ํ•ด ๊ณ„์† ๋ฐ˜๋ณต์„ ๋Œ๋ฉฐ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํƒˆ ๊ฒƒ)
        if (toPick == 0) {
            System.out.println(pickedList);
            return;
        }
        
        // ๋ฐ˜๋ณต๋ฌธ์—์„œ ์ด์ „์— ๊ณ ๋ฅธ ์ˆซ์ž +1 ๋ถ€ํ„ฐ ๋ฐ˜๋ณต์„ ๋Œ์•˜๋“ฏ์ด
        // ์ง์ „์— ๊ณ ๋ฅธ ์ˆซ์ž๋ณด๋‹ค 1ํฐ ์ˆซ์ž๋ถ€ํ„ฐ ๋ฐ˜๋ณต๋ฌธ ์‹œ์ž‘
        int startNumber = 0;
        if (pickedList.size() != 0) {
            startNumber = pickedList.get(pickedList.size() - 1) + 1;
        }
        
        for (int i = startNumber; i < n; i++) {
            pickedList.add(i);  // ์ž‘์€ ์ˆซ์ž๋ถ€ํ„ฐ ๋ฐ˜๋ณต์„ ์‹œ์ž‘ํ•˜์—ฌ ๊ณ ๋ฅธ ์›์†Œ ๋ฆฌ์ŠคํŠธ์— ๋‹ด์Œ
            pick(n, pickedList, toPick - 1);    // ์ž‘์€ ์›์†Œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋‹ด๋Š” ๊ณผ์ •์„ ์žฌ๊ท€๋กœ ๋ฐ˜๋ณต
            pickedList.remove(pickedList.size() - 1);   // ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ง€์šฐ๊ณ  ๋˜ ๋‹ค์‹œ ์ถ”๊ฐ€, ์žฌ๊ท€ ๋ฐ˜๋ณต
        }
    }
}

 

์‹คํ–‰๊ฒฐ๊ณผ

 

 

๊ฐ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์—ญํ• 

- n: ์ „์ฒด ์›์†Œ ์ˆ˜ (์˜ˆ์‹œ ์ฝ”๋“œ์—์„œ๋Š” 5๊ฐœ๋กœ 0~4๊นŒ์ง€์˜ ์ˆซ์ž)

์ง์ „์— ๊ณ ๋ฅธ ์ˆซ์ž์— 1์„ ๋”ํ•œ ์‹œ์ž‘ ์›์†Œ๊ฐ€ 1์”ฉ ์ปค์ง€๋ฉฐ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ ๋•Œ ์ตœ๋Œ€ ์ˆซ์ž๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

n์ด 6์ผ ๊ฒฝ์šฐ ๋ฒ”์œ„๊ฐ€ 0~5๊นŒ์ง€๋กœ ๋Š˜์–ด๋‚˜ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

 

 

- pickedList: ์ง€๊ธˆ๊นŒ์ง€ ๊ณ ๋ฅธ ์›์†Œ๋“ค ๋ชฉ๋ก (์˜ˆ์‹œ ์ฝ”๋“œ์—์„œ๋Š” ์‹œ์ž‘ ์‹œ 0๊ฐœ, ์ข…๋ฃŒ ์‹œ 4๊ฐœ)

- toPick: ๋” ๊ณจ๋ผ์•ผ ํ•  ์›์†Œ ์ˆ˜ (์‹œ์ž‘ ์‹œ 4๊ฐœ, ์ข…๋ฃŒ ์‹œ 0๊ฐœ)

๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด 1์”ฉ ์ปค์ง€๋ฉด์„œ ๋ชฉ๋ก์— ์›์†Œ๊ฐ€ ๋‹ด๊ธฐ๊ณ , ๋” ๊ณจ๋ผ์•ผ ํ•  ์›์†Œ ์ˆ˜์ธ toPick์ด 0์ด ๋  ๋•Œ pickedList๋Š” 4๊ฐ€ ๋œ๋‹ค.

๋งจ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด๋ณด๋ฉด ์•„๋ฌด ๊ฒƒ๋„ ๋‹ด๊ฒจ์žˆ์ง€ ์•Š์„ ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆœ์„œ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘ํ•˜๋ฉฐ ๋” ๊ณจ๋ผ์•ผ ํ•  ์›์†Œ ์ˆ˜๊ฐ€ 0์ด ๋  ๋•Œ ์ถœ๋ ฅํ•˜๊ณ  ์ค‘๋‹จํ•œ๋‹ค.

(5, [0], 3) → (5, [0, 1], 2) → (5, [0, 1, 2], 1) → (5, [0, 1, 2], 0)

 

์ดํ›„ ๋ชฉ๋ก์— ๋‹ด๊ธด ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋˜ ๋‹ค์Œ์œผ๋กœ ์ž‘์€ ์ˆซ์ž๋ฅผ ์ฐพ๋Š”๋‹ค. ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ง€์›Œ์ฃผ์ง€ ์•Š๊ณ  ํ•ด๋‹น ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์‹คํ–‰๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

 

 

๋Œ“๊ธ€