PS/BOJ
[백준 C++] 1759 암호 만들기
포뇨링
2023. 3. 10. 12:28
https://www.acmicpc.net/problem/1759
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
치킨배달과 굉장히 비슷한 문제라고 느껴진다.
[백준 C++] 15686 치킨 배달
https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태
chhggg.tistory.com
이제 위 문제와 좀 다른 점은 자음/모음개수를 신경 써 줘야한다는 것밖에 없다. 그만큼 코드도 굉장히 유사하다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll L, C;
vector<char> alpha;
string str;
ll vo_count;
ll vo(char tmp) { //모음이면 1반환
if (tmp == 'a' || tmp == 'e' || tmp == 'i' || tmp == 'o' || tmp == 'u') {
return 1;
}
return 0;
}
void search(ll idx) {
ll cnt = alpha.size();
if (str.length()==L){
if (vo_count != 0 && vo_count <= L-2) {
cout << str << '\n';
}
return;
}
else {
for (ll i = idx; i < cnt; i++) {
str += alpha[i];
vo_count += vo(alpha[i]);
search(i + 1);
str.pop_back();
vo_count -= vo(alpha[i]);
}
}
}
int main(void) {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> L >> C;
//input
for (ll i = 0; i < C; i++) {
char tmp;
cin >> tmp;
alpha.push_back(tmp);
}
sort(alpha.begin(), alpha.end());
search(0);
}