패스트터틀

(Baekjoon) backtracking - (1) 로또 본문

Algorithm/baekjoon

(Baekjoon) backtracking - (1) 로또

SudekY 2019. 11. 15. 16:05

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

 

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

www.acmicpc.net

 

7을 입력하고 

 

1 - 2 - 3 - 4 - 5 - 6 - 7

로 끝까지 dfs로 들어간후 한단계씩 backtracking하는것

 

visited로 방문을 확인할 필요가 없는것은 오름차순이기때문이다.

2-3-5-6-1-4 일경우에는 visited로 

for(i = v+1)이 아닌 for( i = 0) 으로 0부터 탐색을 전부해줘야한다.

package backtracking;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.Buffer;
import java.util.Scanner;

public class _6603 {
    static Scanner sc = new Scanner(System.in);
    static int n;
    static int number[] = new int[13];
    static int count;
    static StringBuffer bf = new StringBuffer();
    public static void dfs(int a,String str){

        if(count == 6){
            bf.append(str+"\n"); // 6개가 채워지면은 bf에다가 넣고 엔터
        }
        else{
            for (int i = a + 1; i < n; i++) { // 1 - 2 - 3 - 4 - 5 - 6 - 7 (오름차순으로 되어있기 떄문에) a+1부터 n까지
                count++;
                dfs(i,str+number[i]+" ");  // 다음꺼에 넘겨주기
            }
        }
    
        count--;    // 끝나면 지금까지 더해졌던 count를 --해야지 그전에서 실행됨

    }
    public static void main(String args[]){

        while((n = sc.nextInt()) != 0){
        
            for (int j = 0; j < n; j++) {
                number[j] = sc.nextInt();
            }

            for (int i = 0; i < n; i++) { // 1-2-3-4-... 백트래킹
                count=1;                  // 2-3-4-5-... 백트래킹
                dfs(i,number[i]+" ");     // 3-4-5-6.... 백트래킹
            }
            bf.append("\n");

        }
        System.out.println(bf.toString());

    }

}

 

 

 

 

백준문제풀이Github : 

https://github.com/sdk0213/baekjoon-study

 

sdk0213/baekjoon-study

solve a baekjoon question. Contribute to sdk0213/baekjoon-study development by creating an account on GitHub.

github.com

 

Comments