Machineboy空
4659 : 비밀번호 발음하기 - 플래그 본문
https://www.acmicpc.net/problem/4659
4659번: 비밀번호 발음하기
좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp
www.acmicpc.net
문제요약
비밀번호가 조건에 맞는지 판단하기
난이도
Silver 5
풀이 포인트
- 플래그 적절히 사용
REVIEW
우선 이런 문제는 체력으로 풀 수 있기에 맞췄다.
하지만 모범 답안과 달리 조건 마다 플래그를 달아 반복문을 탈출하는 형식으로 짰다.
그리고 자음, 모음이 3번 연속되는지를 판단하는 코드도 앞선 두개를 비교하는 식으로 3덩어리씩 비교했다.
이제 모범 답안에서 배울 것.
- good인지 bad인지 플래그 하나로 처리하여 가장 하단에서 결과 출력.
- 연속되는 것 카운트도 이전과 현재를 비교하는 식으로만 구현.
- 모음이라면 모음 카운트 ++, 자음 연결은 끊어지니까 0
- 자음이라면 자음 카운트++, 모음 연결은 끊어지니까 0;
사실 연속카운트 요렇게 구성했다가 연결 끊어짐을 0으로 갱신 안하고 --로 해서 틀렸던 것 같음.
조건식을 최대한 간결하게 그리고 반복을 최대한 적게 설계하는 것 고민하기.
CODE
#include <bits/stdc++.h>
using namespace std;
string s;
int lcnt, vcnt;
bool isVowel(int idx)
{
return (idx == 'a' || idx == 'e' || idx == 'i' || idx == 'o' || idx == 'u');
}
int main()
{
while (true)
{
cin >> s;
if (s == "end")
break;
lcnt = vcnt = 0;
bool flag = 0;
bool is_include_v = 0;
int prev = -1;
for (int i = 0; i < s.size(); i++)
{
int idx = s[i];
if (isVowel(idx))
lcnt++, vcnt = 0, is_include_v = 1;
else
vcnt++, lcnt = 0;
if (vcnt == 3 || lcnt == 3)
flag = 1;
if (i >= 1 && (prev == idx) && (idx != 'e' && idx != 'o'))
{
flag = 1;
}
prev = idx;
}
if (is_include_v == 0)
flag = 1;
if (flag)
cout << "<" << s << ">"
<< " is not acceptable.\n";
else
cout << "<" << s << ">"
<< " is acceptable.\n";
}
return 0;
}
'Computer > Coding Test' 카테고리의 다른 글
10709 : 기상캐스터 - if 조건부 구성 (2) | 2024.02.15 |
---|---|
2870 : 수학숙제 - stoi, 문자열기반 숫자 대소비교, custom operator (1) | 2024.02.15 |
2910 : 빈도 정렬 - map, 카운팅, 정렬 (0) | 2024.02.14 |
1992 : 쿼드트리 - 분할 정복(Divide and Conquer) , 재귀 함수 (1) | 2024.02.14 |
2828 : 사과 담기 게임 (0) | 2024.02.13 |