문제 정보
백준 ( BOJ ) 6603 로또
문제 풀이 : 브루트포스
문제 출처 : https://www.acmicpc.net/problem/6603
시작 Thinking
우선 수열쪽 문제랑 같은 원리입니다.
순서 상관없이 중복 없이, 하나씩 모든 조합을 출력 해 주시면 됩니다.
순서상관 없이, 중복 없이 출력이라면, 매 재귀마다 시작점을 넘겨주고,
순서상관 있고, 중복 있게(들어간 수들이) 출력하려면, 시작점을 넘겨주지 않고, 0부터 다 돌면 됩니다. 이런 간단한 수열 관련이나 브루트포스쪽 문제들은
복잡한게 아니라면, 10분내에 문제 읽고 푸는거 까지 완료 해 주실 정도로
익숙 해 지셔야 합니다.
그래야 더 조건을 많이 들고나오는 복잡한 문제에서도 연결 해 나갈 수 있어요!
관련 문제들의 기본틀은 늘
fun(){
if(end)
cout
else
for(){
fun();
}
}
위와 같은 기본 틀을 기반으로 만들어 집니다.
코드
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int k = 6;
vector<int> lotto(13, 0);
vector<int> visitied(13, 0);
void cal(int c, string answer, int start) {
if (c == 7) {
cout << answer << "\n";
}
else {
for (int i = start; i < k; i++) {
if (visitied[i] == 1)
continue;
visitied[i] = 1;
cal(c + 1, answer + to_string(lotto[i]) + " ",i+1);
visitied[i] = 0;
}
}
}
int main() {
int temp;
while (true) {
cin >> k;
if (k == 0)
break;
for (int i = 0; i < k; i++) {
cin >> temp;
lotto[i] = temp;
visitied[i] = 0;
}
cal(1, "",0);
cout << "\n";
}
}