지나공 : 지식을 나누는 공간

[백준] 1759_암호 만들기 C++ 본문

Algorithm/백준

[백준] 1759_암호 만들기 C++

해리리_ 2021. 1. 11. 17:58

www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.

www.acmicpc.net

 

next_permutation으로 조합을 구현했다.

 

 

주석 없는 코드

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

int main() {
	vector<char> v;
	vector<int>pick;
	int l, c;
	cin >> l >> c;
	for (int i = 0; i < c; i++) {
		char x;
		cin >> x;
		v.push_back(x);
		pick.push_back(1);
	}
	sort(v.begin(), v.end());
	for (int i = 0; i < l; i++) {
		pick[i] = 0;
	}
	do {
		string s = "";
		for (int i = 0; i < c; i++) {
			if (pick[i] == 0) {
				s = s + v[i];
			}
		}
		int cnt1 = 0;
		int cnt2 = 0;
		for (int i = 0; i < s.size(); i++) {
			if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u')
				cnt1++;
			else
				cnt2++;
		}
		if (cnt1 < 1 || cnt2 < 2)
			continue;
		cout << s <<'\n';
	} while (next_permutation(pick.begin(), pick.end()));

}

 

 

주석 있는 코드

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

int main() {
	vector<char> v; //실제 char을 넣을 벡터
	vector<int>pick; //next_permutation을 위한 벡터
	int l, c;
	cin >> l >> c;
	for (int i = 0; i < c; i++) {
		char x;
		cin >> x;
		v.push_back(x);
		pick.push_back(1);
	}
	sort(v.begin(), v.end()); //정렬된 채로 뽑는댔으니까
    
    //뽑으려는 문자 개수에 맞게 pick을 바꿔주자.
    //pick을 0 0 0 0 1 1 로 만들어서 pick에서 0을 가진 위치에 해당되는 4개의 v[i]를 뽑을 것이다.
 	for (int i = 0; i < l; i++) {
		pick[i] = 0;
	}
    
    
	do {
		string s = "";
		for (int i = 0; i < c; i++) {
			if (pick[i] == 0) {
				s = s + v[i];//뽑은 문자 조합을 string으로 받기
			}
		}
		int cnt1 = 0;//모음 개수
		int cnt2 = 0;//자음 개수
		for (int i = 0; i < s.size(); i++) {
			if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u')
				cnt1++;
			else
				cnt2++;
		}
		if (cnt1 < 1 || cnt2 < 2) //조건에 안 맞으면 출력 안하고 넘어가기
			continue;
		cout << s <<'\n';
	} while (next_permutation(pick.begin(), pick.end()));

}
728x90
Comments