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);
}
}
백준 14889 스타트와 링크(java) (0) | 2024.10.26 |
---|---|
백준 11000 강의실배정 (C++) (0) | 2024.02.27 |
백준 1759 암호 만들기 (C++) (0) | 2024.02.19 |
백준 1697 숨바꼭질 (C++) (0) | 2024.02.18 |
백준 1932 정수삼각형 (C++) (0) | 2024.02.17 |