๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm

[Algorithm/Java][๋ฐฑ์ค€] 6603 ๋กœ๋˜

๋ฐ˜์‘ํ˜•

[๋ฐฑ์ค€] 6603 ๋กœ๋˜

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

๋ฌธ์ œ ์ ‘๊ทผ

๋ฐฑํŠธ๋ž˜ํ‚น ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ DFS๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€์—ˆ๋‹ค.
๋จผ์ € ์ž…๋ ฅ์„ ๋ฐ›์€ ์ˆซ์ž๋ฅผ nums์— ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉํ–ˆ๋Š”์ง€๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ nums์™€ ๊ฐ™์€ ํฌ๊ธฐ์˜ boolean ๋ฐฐ์—ด๋กœ visited๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ตœ์ข…์ ์œผ๋กœ 6๊ฐœ์˜ ๋กœ๋˜ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด lotto๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
๊ฒฐ๊ณผ๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋‚˜์™€์•ผ ํ•ด์„œ lotto[cnt-1]๊ณผ nums[i]๋ฅผ ๋น„๊ตํ•ด์„œ ํƒ์ƒ‰์„ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ6603 {
    static int[] nums;
    static boolean[] visited;
    static int[] lotto = new int[6];
    static StringBuilder sb;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        while(true){
            String[] input = br.readLine().split(" ");
            if(input[0].equals("0")) break;
            nums = new int[Integer.parseInt(input[0])];
            visited = new boolean[Integer.parseInt(input[0])];
            for(int i = 1; i<input.length; i++){
                nums[i-1] = Integer.parseInt(input[i]);
            }
            sb = new StringBuilder();
            generateLotto(0);
            System.out.println(sb.toString());
        }
    }
    static void generateLotto(int cnt){
        if(cnt == 6){
            for(int i = 0; i<lotto.length; i++){
                sb.append(lotto[i]);
                if(i!=lotto.length-1) sb.append(" ");
            }
            sb.append("\n");
        } else {
            for(int i = 0; i<nums.length; i++){
                if(!visited[i]){
                    if(cnt != 0 && lotto[cnt-1] > nums[i]) continue;
                    // ์ˆซ์ž๋ฅผ ๋กœ๋˜์— ํฌํ•จํ–ˆ์„ ๋•Œ
                    visited[i] = true;
                    lotto[cnt] = nums[i];
                    generateLotto(cnt+1);
                    // ์ˆซ์ž๋ฅผ ๋กœ๋˜์— ํฌํ•จํ•˜์ง€ ์•Š์•˜์„ ๋•Œ
                    visited[i] = false;
                }
            }
        }
    }
}

๋А๋‚€ ์ 

์ด์ œ๋Š” DFS์™€ BFS ๊ธฐ๋ณธ ๋ฌธ์ œ๋Š” ์ž˜ ํ’€ ์ˆ˜ ์žˆ๊ฒŒ๋œ ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ๊นŒ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด์„œ generateLottoํ•จ์ˆ˜์— cnt ํŒŒ๋ผ๋ฏธํ„ฐ ๋ง๊ณ  ์‹œ์ž‘ ์ธ๋ฑ์Šค๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์„œ ๊ทธ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ถ€ํ„ฐ for๋ฌธ์„ ๋Œ๋ฆฌ๋Š” ๋ฐฉ์‹์ด ์žˆ๋Š”๋ฐ ๊ทธ๊ฒƒ๋„ ์ข‹์€๊ฒƒ ๊ฐ™๋‹ค.

๋ฐ˜์‘ํ˜•