본문 바로가기

Algorithm/문자열 처리

Baekjoon 16944 강력한 비밀번호

Link https://www.acmicpc.net/problem/16944

소스결과 1988 KB / 0 ms

출처 Baekjoon

언어 C++ 17

분류 문자열 처리

 

설명

큐브러버가 리듬 테트리스에서 비밀번호를 만들 때 규칙을 지킨 비밀번호를 만들기 위해 현재 비밀번호에서 몇자리를 더 수정 해야 하는지 구하는 문제

 

설명은 길지만 내용은 간단한 문제

비밀번호의 조건을 크게 길이가 6글자를 만족 하는지, 숫자 ~ 특수문자 까지의 조건을 몇가지 만족하는지 로나누어서 구한다.

둘 중 더 큰 값을 표시하는게 정답이 된다.

 

알고리즘

1. 글자 수와 현재 비밀번호를 받는다.

2. 현재 비밀번호의 길이 - 6 값을 구한다. ( 길이 미달 조건 판별 )

3. 현재 비밀번호를 기준으로 숫자, 소문자, 대문자, 특수문자, 4가지 조건을 몇가지 만족하지 않는지 구한다.

4. 2 와 3에서 구한 값중 큰 값을 출력한다.

 

소스코드

#include <iostream>

using namespace std;

const short MAX = 100;
const short WORDS_MAX = 12;

bool isSpecial(char c)
{
	char words[WORDS_MAX] = { '!', '@','#','$','%','^','&','*','(',')', '-', '+' };
	for (int i = 0; i < WORDS_MAX; i++)
		if (c == words[i])
			return true;

	return false;
}

int main()
{
	bool trigger[4] = {};
	char input[MAX] = {};
	int len, need, needTrigCount = 0;

	cin >> len >> input;

	need = 6 - len;

	for (int i = 0; i < len; i++)
	{
		if ('0' <= input[i] && input[i] <= '9')
			trigger[0] = true;
		else if ('a' <= input[i] && input[i] <= 'z')
			trigger[1] = true;
		else if ('A' <= input[i] && input[i] <= 'Z')
			trigger[2] = true;
		else if (isSpecial(input[i]))
			trigger[3] = true;
	}

	for (int i = 0; i < 4; i++)
		if (!trigger[i])
			needTrigCount++;

	cout << (need < needTrigCount ? needTrigCount : need);

	return 0;
}

 

'Algorithm > 문자열 처리' 카테고리의 다른 글

Baekjoon 16674 2018년을 되돌아보며  (0) 2019.03.31
Baekjoon 10353 큰 수 A+B (2)  (0) 2019.03.08
Baekjoon 6324 URLs  (0) 2019.03.08
BaekJoon 2864 5와 6의 차이  (0) 2019.01.29
BaekJoon 1157 단어 공부  (0) 2019.01.17