백준 4659 : 비밀번호 발음하기
문제 링크
https://www.acmicpc.net/problem/4659
문제 내용
(요약) 입력받은 패스워드에 대해 품질을 평가한다.
높은 품질을 가진 비밀번호의 조건은 다음과 같다.
- 모음(a, e, i, o ,u) 하나를 반드시 포함하여야 한다.
- 모음이 3개 혹은 자음이 3개 연속으로 오면 안된다.
- 같은 글자가 연속적으로 두번 오면 안되나, ee와 oo는 허용한다.
end를 입력하면 프로그램을 종료한다.
Idea
이번 코드의 핵심은 해당 패스워드가 acceptable인지 아닌지를 판별하는 정수형 변수 accept이다.
default 값으로 accept = 1(true)로 지정하고, 위의 비밀번호 조건에 위배되는 부분을 찾으면 accpet=0(false)로 바꿔 올바른 결과를 출력 할 수 있도록 유도한다.
비밀번호 조건을 검사하기 위해 다음과 같은 변수들이 사용되었다.
- int exist : 모음이 존재하는지 판별
- int vowel : 모음의 개수 count
- int consonants : 자음의 개수 count
- int accept : 비밀번호 품질 판별
모음 혹은 자음의 연속되는 개수가 3개 이상인지를 판단하기 위해 vowel(모음)과 consonants(자음)을 사용하였다. 현재 검사하는 문자가 모음이라면 모음에는 1을 추가하고 자음은 0으로 초기화한다. 반대로 문자가 자음이라면 자음에는 1을 추가하고 모음은 0으로 초기화한다.
이런식으로 모음과 자음의 연속되는 개수를 판단할 수 있다.
code
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
|
#include <stdio.h>
#include <string.h>
int main() {
int i, accept, vowel, consonants, exist;
char pw[21];
while (1) {
vowel = consonants = exist = 0;
accept = 1;
scanf("%s", pw);
//문자열이 "end"이면 프로그램 종료
if (strcmp(pw, "end") == 0) break;
//문자열 검사
for (i = 0; i < strlen(pw); i++) {
//모음일 때, 모음++, 자음=0
//모음이 존재하므로 exist =1
if (pw[i] == 'a' || pw[i] == 'e' || pw[i] == 'i' || pw[i] == 'o' || pw[i] == 'u') {
exist = 1;
vowel++;
consonants = 0;
}
//자음일 때, 자음++, 모음=0
else {
consonants++;
vowel = 0;
}
//자음이나 모음의 개수가 3개일 때
//accept를 0으로 바꾸고 검사 종료
if (vowel == 3 || consonants == 3) {
accept = 0;
break;
}
//연속된 단어가 들어올 때,
if (i < strlen(pw) - 1) {
//ee나 oo는 통과
if (pw[i] == 'e'&&pw[i + 1] == 'e' || pw[i] == 'o'&&pw[i + 1] == 'o') continue;
//아니라면 accpet를 0으로 바꾸고 검사 종료
else if (pw[i] == pw[i + 1]) {
accept = 0;
break;
}
}
}
//accept=1 이면서 exist=1 인 경우 acceptable, 그외 not acceptable
if (accept && exist) printf("<%s> is acceptable.\n", pw);
else printf("<%s> is not acceptable.\n", pw);
}
return 0;
}
|
'백준 Baekjoon' 카테고리의 다른 글
[C언어] 백준 2822 : 점수 계산 (0) | 2020.07.21 |
---|---|
[C언어] 백준 6378 : 디지털 루트 (0) | 2020.07.21 |
[C언어] 백준 9557 : Arabic and English (0) | 2020.07.20 |
[C언어] 백준 1003 : 피보나치 함수 (0) | 2020.07.20 |
[JAVA] 백준 2748 : 피보나치 수 2 (0) | 2020.07.20 |