๐Ÿ“– [๋ฐฑ์ค€์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด] Q.6603 ๋กœ๋˜ ๋ฌธ์ œ ํ’€์ด - java

๐Ÿ“– ๋ฌธ์ œ

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

๋…์ผ ๋กœ๋˜๋Š” {1, 2, โ€ฆ, 49}์—์„œ ์ˆ˜ 6๊ฐœ๋ฅผ ๊ณ ๋ฅธ๋‹ค.

๋กœ๋˜ ๋ฒˆํ˜ธ๋ฅผ ์„ ํƒํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ์ „๋žต์€ 49๊ฐ€์ง€ ์ˆ˜ ์ค‘ k(k>6)๊ฐœ์˜ ์ˆ˜๋ฅผ ๊ณจ๋ผ ์ง‘ํ•ฉ S๋ฅผ

๋งŒ๋“  ๋‹ค์Œ ๊ทธ ์ˆ˜๋งŒ ๊ฐ€์ง€๊ณ  ๋ฒˆํ˜ธ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, k=8, S={1,2,3,5,8,13,21,34}์ธ ๊ฒฝ์šฐ ์ด ์ง‘ํ•ฉ S์—์„œ ์ˆ˜๋ฅผ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์ด 28๊ฐ€์ง€์ด๋‹ค.

([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], โ€ฆ, [3,5,8,13,21,34])

์ง‘ํ•ฉ S์™€ k๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ˆ˜๋ฅผ ๊ณ ๋ฅด๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ” ์ ‘๊ทผ๋ฒ•

Q.6603 ๋กœ๋˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ์˜ ์กฐ๊ฑด๋Œ€๋กœ ์ฃผ์–ด์ง„ ์ˆซ์ž๋“ค ์ค‘์— 6๊ฐœ ์ˆซ์ž๋ฅผ ๊ณ ๋ฅด๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ˆซ์ž์˜ ์ˆœ์„œ๊ฐ€ ๋‹ฌ๋ผ๋„ ๋˜‘๊ฐ™์œผ๋ฏ€๋กœ

์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์ฃผ์–ด์ง„ n๊ฐœ์ค‘ 6๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š”

nC6 -> ์กฐํ•ฉ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ†ตํ•ด n๊ฐœ์ค‘ 6๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ๋“ค์„

๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ป ์ฝ”๋“œ


package problem.backtracking;

import java.util.Scanner;

public class Main_6603 {
    static boolean[] visited;
    static final int MAX = 6;
    static StringBuilder sb;
    static int lotto[];
    static int n;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        sb = new StringBuilder();
        while (true) {
            n = sc.nextInt();
            if (n == 0)
                break;
            lotto = new int[n];
            visited = new boolean[n];
            for (int i = 0; i < n; i++) {
                lotto[i] = sc.nextInt();
            }
            dfs(0,0);
            sb.append("\n");
        }
        System.out.print(sb.toString());
    }

    public static void dfs(int depth,int index){
        if(MAX == depth){
            print();
            return;
        }
        for(int i=index; i<n; i++){
            if(!visited[i]){
                visited[i] = true;
                dfs(depth+1,i);
                visited[i] = false;
            }
        }
    }

    public static void print(){
        for(int i=0; i<n; i++ ){
            if(visited[i]){
                sb.append(lotto[i]+" ");
            }
        }
        sb.append("\n");
    }
}


Written on March 14, 2021