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 |