본문 바로가기
[ 다먹살 ]/- Coding

[백준] 6603 로또

by 엉망으로살기 2021. 11. 23.
반응형

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

 

6603번: 로또

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로

www.acmicpc.net

 

사실 입출력 예제가 더 있는데 밑 부분은 너무 길어서 잘랐다. 이 문제는 기존의 일반적인 순열을 사용하는 문제이다. 원래는 임시 변수를 보통 String이나 int 배열 등을 사용하지만 이번에는 ArrayList를 사용해서 현재의 값을 저장한 후, 조건에 맞을 때(개수가 6일때) StringBuilder에 하나씩 배열 형태로 쌓아서 한꺼번에 출력시켰다.

 


문제 및 입출력


코드

import java.util.ArrayList;
import java.util.Scanner;

public class Main
{
    // 순서가 있고 중복이 안되는 순열 만들기
    public static void makeLotto(StringBuilder sb, ArrayList<Integer> temp, int start, int[] s, boolean[] visit, int target)
    {
        if(temp.size()==target)
        {
            for(int i=0; i<temp.size(); i++)
            {
                sb.append(temp.get(i) + " ");
            }
            
            sb.append("\n");
            return;
        }
        
        for(int i=start; i<s.length; i++)
        {
            if(!visit[i])
            {
                visit[i] = true;
                temp.add(s[i]);
                makeLotto(sb, temp, i, s, visit, target);
                temp.remove(temp.size()-1);
                visit[i] = false;
            }
        }
    }
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        
        while(true)
        {
            StringBuilder sb = new StringBuilder();
            String t = sc.nextLine();
            
            // 테스트케이스 종료조건
            if(t.equals("0"))
            {
                break;
            }
            
            String[] value = t.split(" ");
            // 순열을 만들 값 설정
            int k = Integer.parseInt(value[0]);
            int[] s = new int[k];
            boolean[] visit = new boolean[k];
            // 순열은 무조건 6개로 고정
            int target = 6;
            ArrayList<Integer> temp = new ArrayList<Integer>();
            
            for(int i=1; i<value.length; i++)
            {
                s[i-1] = Integer.parseInt(value[i]);
            }
            
            makeLotto(sb, temp, 0, s, visit, target);
            System.out.println(sb.toString());
        }
        
        sc.close();
    }
}

 

 

 

반응형

'[ 다먹살 ] > - Coding' 카테고리의 다른 글

[백준] 1010 다리놓기  (0) 2021.11.24
[프로그래머스] 레벨2 카카오프렌즈 컬러링북  (0) 2021.11.23
[백준] 1934 최소공배수  (0) 2021.11.22
[백준] 1977 완전제곱수  (0) 2021.11.22
[백준] 13458 시험 감독  (0) 2021.11.22

댓글