• Home
  • About
    • 코드좀비 photo

      코드좀비

      An amazing website.

    • Learn More
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

[BOJ] 백준 6603 로또 간단한설명과 코드 C++

28 Mar 2020

Reading time ~1 minute

문제 정보

백준 ( 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";
			
	}
}


백준C++브루트포스 Share Tweet +1