4659 - 비밀번호 발음하기

재찬·2023년 1월 27일
0

Algorithm

목록 보기
25/64

문제

코드

#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(1){
		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)){
				vcnt++; lcnt=0; is_include_v = 1;
			}else{
				vcnt = 0; lcnt++;
			}
			if(lcnt == 3 || vcnt == 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";
	}
}

풀이 과정

연속된 값 즉, i와 i-1을 비교 하는 부분을 prev 변수를 설정하고 변수와 현재 값을 비교하는 방식으로 코드를 수정해보았다.

결과

후기

단순 구현 문제였으나 설계를 얼마나 깔끔하게 하는지가 중요하다고 생각한 문제였다.
처음에 if문으로 하나씩 중첩해서 해봤는데 코드가 너무 지저분했다.
단순 구현일 때는 설계를 잘해서 깔끔한 코드를 만들도록 노력해야겠다.

0개의 댓글