상세 컨텐츠

본문 제목

백준 6603 로또 (c++/백트래킹)

baekjoon

by nownow 2024. 2. 26. 23:53

본문

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

처음 푼 방문여부 배열로 체크하며 검사한 풀이

출력 조건만 보고 오름차순 조건과 방문여부 배열을 추가했지만

입력 조건에 원소가 오름차순으로 주어진다는 것을 확인하고 하단에 풀이를 추가

#include<iostream>
#include<map>
#include<string>
#include<vector>
#include<sstream>
#include<cstring>
using namespace std;
int arrsize;
int arr[13];
int prarr[13];
bool check[13];
void back(int prev, int size);
int main()
{
	cin >> arrsize;
	while (arrsize != 0)
	{
		memset(check, 0, sizeof(check));
		for (int i = 0; i < arrsize; i++)
		{
			cin >> arr[i];
		}
		back(-1,0);
		cout << "\n";
		cin >> arrsize;
	}
}
void back(int prev,int size)
{
	if (size == 6) {
		for (int i = 0; i < size; i++)
		{
			cout << prarr[i] << " ";
		}
		cout << "\n";
		return;
	}
	for (int i = 0; i < arrsize; i++)
	{
		if (!check[i] && arr[i]>prev)
		{
			prarr[size] = arr[i];
			check[i] = 1;
			back(arr[i],size + 1);
			check[i] = 0;
		}
	}
	
}

 

더 간단하게 풀 수 있다.

#include<iostream>
#include<map>
#include<string>
#include<vector>
#include<sstream>
#include<cstring>
using namespace std;
int arrsize;
int arr[13];
int prarr[13];
bool check[13];
void back(int prev, int size);
int main()
{
	cin >> arrsize;
	while (arrsize != 0)
	{
		memset(check, 0, sizeof(check));
		for (int i = 0; i < arrsize; i++)
		{
			cin >> arr[i];
		}
		back(0,0);
		cout << "\n";
		cin >> arrsize;
	}
}
void back(int start,int size)
{
	if (size == 6) {
		for (int i = 0; i < size; i++)
		{
			cout << prarr[i] << " ";
		}
		cout << "\n";
		return;
	}
	for (int i = start; i < arrsize; i++)
	{
			prarr[size] = arr[i];
			back(i+1,size + 1);
	}
	
}

'baekjoon' 카테고리의 다른 글

백준 11000 강의실배정 (C++)  (0) 2024.02.27
백준 1759 암호 만들기 (C++)  (0) 2024.02.19
백준 1697 숨바꼭질 (C++)  (0) 2024.02.18
백준 1932 정수삼각형 (C++)  (0) 2024.02.17
백준 11726 2xn 타일링(C++)  (0) 2024.02.17

관련글 더보기