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 |
Tags
- Spring
- 컴퓨터 네트워크
- 순열
- TCP
- 트리
- HTTP
- 백준
- 다이나믹 프로그래밍
- 그리드
- 이분탐색
- SQL
- 재귀
- dfs
- 알고리즘
- 분할정복
- BFS
- GIT
- github action
- CI/CD
- 자료구조
- AWS
- 그리드 알고리즘
- 분할 정복
- 역방향 반복자
- 그래프
- 도커
- 자바
- 브루트포스
- 다이나믹프로그래밍
- 스프링
Archives
- Today
- Total
코딩성장스토리
백준 1759번: 암호 만들기 본문
https://www.acmicpc.net/problem/1759
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
이 문제를 볼때 브루트포스(완전탐색)가 가능한 범위였고 그냥 for문으로 풀까 고민하고 순열로 할까 고민했다. 순열로
일단 백준강의에서는 재귀로 나왔고 재귀적으로 생각하기에는 아직 벅찼다. 어쨋든 재귀적으로 구현을 완료했으며 코드를 보자
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool check(string password){ //자음 최소 2개 이상 모음 최소1개이상 조건 충족하는지
int ja=0;
int mo=0;
for(char c:password){
if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'){
mo++;
}else{
ja++;
}
}
return mo>=1&&ja>=2;
}
void go(int n,vector<char> &c,string password,int i){
if(password.length()==n){ //패스워드 길이가 주어진 길이랑 같을 떄 출력
if(check(password)){
cout<<password<<'\n';
}
return;
}
if(i>=c.size()){
return;
}
go(n,c,password+c[i],i+1); //i번째 패스워드 추가하고 다음
go(n,c,password,i+1); //i번쨰 패스워드 추가 안하고 다음
}
int main(){
int l,c;
cin>>l>>c;
vector<char> carr(c);
string str="";
for(int i=0;i<c;i++){
cin>>carr[i];
cin.ignore();
}
sort(carr.begin(),carr.end()); //정령후 이용
go(l,carr,str,0);
}'백준 코딩' 카테고리의 다른 글
| 백준 2580번:스도쿠 (0) | 2022.02.04 |
|---|---|
| 백준 9663번:N-Queen (0) | 2022.01.29 |
| 백준 1764번:듣보잡 (0) | 2022.01.27 |
| 백준 7785번 : 회사에 있는 사람(역방향반복자 ,반복자) (0) | 2022.01.26 |
| 백준 2022번:사다리 (0) | 2022.01.25 |