Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 파이썬
- HTML
- SWEA
- CSS
- c
- WarGame
- 드림핵
- 백준
- 머신러닝
- c++
- 생활코딩
- XSS Game
- BOJ Python
- Python
- lob
- hackctf
- BOJ
- The Loard of BOF
- hackerrank
- 웹페이지 만들기
- Javascript
- 풀이
- PHP 웹페이지 만들기
- 숙명여자대학교 정보보안동아리
- 자료구조 복습
- 기계학습
- 숙명여자대학교 정보보안 동아리
- C언어
- Sookmyung Information Security Study
- siss
Archives
- Today
- Total
혜랑's STORY
[BOJ_C++] 1759번 : 암호만들기 본문
# 문제
# 풀이
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <cstring>
#include <stack>
#include <vector>
#include <cmath>
using namespace std;
int l, c;
void dfs(string s, int now, int depth, char* list) {
if (depth == l) {
int za, mo; za = mo = 0;
for (int i = 0; i < s.length(); i++) {
if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u')
++mo;
else ++za;
}
if (za >= 2 && mo >= 1) cout << s << "\n";
return;
}
for (int i = now + 1; i <= c - l + depth; i++)
dfs(s + list[i], i, depth + 1, list);
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> l >> c;
char* list = new char[c];
for (int i = 0; i < c; i++) cin >> list[i];
sort(list, list + c);
string s = "";
for (int i = 0; i <= c - l; i++)
dfs(s + list[i], i, 1, list);
return 0;
}
- c개의 문자를 모두 입력받아 정렬을 한다.
- string s를 빈 문자열로 초기화 한 뒤, 정렬된 list의 i번째 원소를 더해가며 dfs를 호출한다.
- s의 길이가 l과 같아진다면 s가 적어도 1개의 모음과 2개의 자음으로 구성되어 있는지 확인하고 맞다면 s를 출력한다.
- 아닌 경우 다음 문자 원소들을 더해가며 dfs를 호출한다.
- 모든 경우의 수를 계산하고 출력한 뒤 프로그램을 종료한다.
# 결과
'무지성 공부방 > 알고리즘 해결' 카테고리의 다른 글
[BOJ_C++] 2776번 : 암기왕 (0) | 2021.07.26 |
---|---|
[BOJ_C++] 2805번 : 나무 자르기 (0) | 2021.07.26 |
[BOJ_C++] 1016번 : 제곱 ㄴㄴ 수 (0) | 2021.07.21 |
[BOJ_C++] 5576번 : 콘테스트 (0) | 2021.07.20 |
[BOJ_C++] 2628번 : 종이자르기 (0) | 2021.07.20 |