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
- 색종이 붙이기
- django
- Java
- 17472
- 따라하기
- 인스타그램
- 14502
- 14888
- 부분수열의 합
- 구슬탈출2
- 16637
- 연산자 끼워넣기
- 다리 만들기2
- 로또
- 17143
- 미세먼지 안녕!
- 좋아요
- 1182
- 재귀
- 6603
- 인스타
- 댓글
- 9095
- 괄호추가하기
- 17136
- 17144
- 알고리즘
- 장고
- 백준
- Ajax
Archives
- Today
- Total
Be a developer
백준 1759 암호 만들기 본문
일단 암호가 오름차순이 되어야 하므로 입력받은 문자들을 sorting한다.
sort는 algorithm 헤더에 있는 함수이다.
문자열을 만들고 문자를 더하여 문장을 만들어 출력해야 하므로, string을 쓴다.
c++은 string 자료형이고, java는 String 자료형이다. 헷갈리지 말자.
자세한 설명은 아래 코드의 주석으로..
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <iostream> #include <algorithm> #include <vector> using namespace std; int l, c;//l은 만들어야 할 암호의 길이, c는 주어지는 알파벳의 수 bool check(string str) { int mo = 0, ja = 0; for (int i = 0; i < str.size(); i++) { switch (str[i]) { case 'a': case 'e': case 'i': case 'o': case'u': mo++; break; default: ja++; } if (mo >= 1 && ja >= 2)return true; } return false; } void solve(int idx, string str, vector<char> alpha) { //일단 암호의 길이가 len을 넘어가면 절대 답이 될 수 없으므로 먼저 거른다. if (str.size() > l) return; //암호의 길이가 정해진 길이와 같으면 한 개의 모음과 2개의 자음을 만족하는지 check한다. 모든 조건 만족시 출력한다. if (str.size() == l) { if (check(str)) { //string의 끝에 \0이 없으니까 한 글자씩 출력한다. for (int i = 0; i < str.size(); i++) { cout << str[i]; } printf("\n"); return; } } //총 문자의 개수를 넘어서 넣을 수도 있으니까 입력받은 문자의 개수를 초과하면 return 시킨다. if (idx + 1 >= c)return; //아직 len에 도달하지 못했을 경우 알파벳을 추가하는 경우와 추가하지 않는 경우로 나눈다. //추가하는 경우. 다음 알파벳으로 idx를 늘리고, str에 알파벳을 추가한다. solve(idx + 1, str + alpha[idx + 1], alpha); //추가하지 않는 경우. 추가하지 않으므로 다음 추가할 알파벳으로 idx는 늘리고, str에는 아무것도 추가하지 않는다. solve(idx + 1, str, alpha); } int main(int argc, char** argv) { cin >> l >> c; vector<char> alpha(c); for (int i = 0; i < c; i++) cin >> alpha[i]; sort(alpha.begin(), alpha.end()); //solve에 들어가서 첫 문자를 넣기 위해서 -1을 인자로 넣어준다. solve(-1, "", alpha); return 0; } | cs |
'알고리즘' 카테고리의 다른 글
백준 1182 부분수열의 합 (0) | 2019.04.03 |
---|---|
백준 6603 로또 (재귀) (0) | 2019.04.03 |
백준 9095 1,2,3 더하기 (재귀) (0) | 2019.04.01 |
백준 14888 연산자 끼워넣기 (0) | 2019.04.01 |
백준 6603 로또 (0) | 2019.04.01 |
Comments