https://www.acmicpc.net/problem/1759
아마 이 문제를 보면 다들 머슬메모리처럼 뇌의 기록이 새록새록 피어날 것이다
"순열문제자놔?"
문제 예시를 보아도 생각할 것이다
"순열문제잖아"
그냥 char arr형태로 바꿔주면 될거같은데?
https://lee-soo.tistory.com/22
[DFS] 백준 6603번 로또 (C++)
https://www.acmicpc.net/problem/6603 자~ 독일 로또를 가져왔다이제 순열을 주구장창 풀어봤다면딱봐도 아하 순열문제구나?그럼 이제 아하? 우리가 풀던데로 풀면 되겠구나? 그럼 너무쉽구나? #include
lee-soo.tistory.com
대충 순열을 사용했던 문제를 한번 보고 와라
구조 자체가 비슷하다
하지만 한가지 규칙이 존재한다
그렇군요
그럼, 출력전에 검사하고 보내면 되겄네
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
bool visited[10];
char arr[15];
vector<char> v;
void task(int n, int m, int depth);
int main()
{
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++)
{
cin >> arr[i];
}
sort(arr, arr + m);
task(n, m, 0);
}
void task(int n, int m, int depth)
{
if (depth == n)
{
int count_1 = 0, count_2 = 0;
for (int i = 0; i < n; i++)
{
if (v[i] == 'a' || v[i] == 'e' || v[i] == 'i' || v[i] == 'o' || v[i] == 'u' )
count_1++;
else
{
count_2++;
}
}
if (count_1 < 1 || count_2 < 2)
{
return;
}
for (int i = 0; i < n; i++)
cout << v[i];
cout << "\n";
return;
}
for (int i = 0; i < m; i++)
{
if (!visited[i] && (v.empty() || v.back() < arr[i]))
{
visited[i] = true;
v.push_back(arr[i]);
task(n, m, depth + 1);
v.pop_back();
visited[i] = false;
}
}
}
이제 이정도 문제는 머슬메모리 기억으로 손이 가는대로 코딩해도 될거같기도하고
'코딩 테스트 준비! (백준) > DFS' 카테고리의 다른 글
[DFS] 백준 14889번 스타트와 링크(C++) (0) | 2025.04.11 |
---|---|
[DFS] 백준 14501번 퇴사(C++) (0) | 2025.04.11 |
[DFS] 백준 6603번 로또 (C++) (0) | 2025.04.10 |
[DFS] 백준 10819번 차이를 최대로 (C++) (0) | 2025.04.09 |
[DFS] 백준 10971번 외판원 순회2(C++) (0) | 2025.04.09 |