본문 바로가기
  • 1+1=3
개발삽질/SSAFY하는 동안 기록

[BOJ]6603_로또(조합)

by 여스 2022. 3. 9.
반응형

 

며칠간 그래프 문제만 풀었더니 이러다 순열조합을 까먹을 것 같아 얼른 풀고 정리하려고 한다.

 

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

 

6603번: 로또

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

www.acmicpc.net

전형적인 조합문제다.

순서 상관없이 주어진 숫자 중에서 6개를 뽑으면 되는 문제다.

 

다음은 코드.

나~중에 혹시 조합이 생각안나게 된다면(ㄹㅇ 그러면 자살각) 참고하도록.

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

public class BOJ6603 {
	
	static int[] arr;
	static boolean[] visited;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		while(true) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int N = Integer.parseInt(st.nextToken());
			if(N == 0) break;
			
			arr = new int[N];
			visited = new boolean[N];
			for(int i=0; i<N; i++) {
				arr[i] = Integer.parseInt(st.nextToken());
			}
			
			combi(N, 0,0);
			System.out.println();
		}
	}
	
	
	static void combi(int N, int cnt, int start) {
		if(cnt ==6) {
			for (int i = 0; i < arr.length; i++) {
				if(visited[i]) {
					System.out.print(arr[i]+" ");
				}
			}
			System.out.println();
			return;
		}
		
		for(int i=start; i<N; i++) {
			visited[i] = true;
			combi(N, cnt+1, i+1);
			visited[i] = false;
		}
	}
}
반응형

댓글