BOJ 6603 로또

2020. 9. 29. 14:20·알고리즘/BOJ

www.acmicpc.net/problem/6603

 

6603번: 로또

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

www.acmicpc.net

49가지 수 중에서 6개를 뽑아 출력하는 문제다.

백트래킹을 이용한 조합 문제였다.

n과 m을 푼 게 도움이 됐다.

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

void dfs(int cnt, int idx, vector<int>& ar, vector<int>& tmp, vector<bool> vis) {
	if (cnt == 6) {
		for (int i = 0; i < cnt; i++) {
			cout << tmp[i] << ' ';
		}
		cout << '\n';
	}
	else {
		for (int i = idx; i < ar.size(); i++) {
			if (!vis[i]) {
				vis[i] = true;
				tmp[cnt] = ar[i];
				dfs(cnt + 1, i, ar, tmp, vis);
				vis[i] = false;
			}
		}
	}
}

int main() {
	ios::sync_with_stdio(false); cin.tie(0);
	int n;
	while (1) {
		cin >> n;
		if (n == 0) break;
		vector<int> ar(n), tmp(n);
		vector<bool> vis(n, false);
		for (int i = 0; i < n; i++) cin >> ar[i];
		dfs(0, 0, ar, tmp, vis);
		cout << '\n';
	}
	return 0;
}

 

처음에는 next_permutation으로 하려 했으나 조합은 어떻게 구해야 하는지 몰라서 dfs로 직접 구현했다..

 

	for (int i = idx; i < ar.size(); i++) {
		if (!vis[i]) {
			vis[i] = true;
			tmp[cnt] = ar[i];
			dfs(cnt + 1, i, ar, tmp, vis);
			vis[i] = false;
		}
	}

 

순열을 뽑는 경우와 달리 조합을 만들려면 int i = 0 이 아니라 idx를 함수 인자로 넣어줘서 같이 올려줘야 조합이 만들어진다.

 

'알고리즘 > BOJ' 카테고리의 다른 글

BOJ 11000 강의실 배정  (0) 2020.10.02
BOJ 2437 저울  (0) 2020.10.02
BOJ 1644 소수의 연속합  (0) 2020.09.23
BOJ 2096 내려가기  (0) 2020.09.23
BOJ 2015 수들의 합 4  (0) 2020.09.23
'알고리즘/BOJ' 카테고리의 다른 글
  • BOJ 11000 강의실 배정
  • BOJ 2437 저울
  • BOJ 1644 소수의 연속합
  • BOJ 2096 내려가기
khyu2
khyu2
  • khyu2
    dev log
    khyu2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘
        • BOJ
        • Programmers
        • Algorithm
        • SWEA
      • 개발
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    큐
    BOJ
    우선순위 큐
    크루스칼
    SWEA
    소수
    유니온 파인드
    피사노 주기
    완전탐색
    GREEDY
    완전 탐색
    행렬 제곱
    dp
    다익스트라
    코딩테스트 연습
    조합
    팰린드롬
    분할 정복
    BFS
    피보나치 수
    냅색
    이분탐색
    알고리즘
    시뮬레이션
    이분 탐색
    구현
    프로그래머스
    MST
    트리
    dfs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
khyu2
BOJ 6603 로또
상단으로

티스토리툴바