[c/c++] 백준 4659 (Silver 5)

은동·2023년 1월 19일
0

Baekjoon

목록 보기
8/49

🔨 문제

https://www.acmicpc.net/problem/4659

<요약>

비밀번호 검사
조건 1. 모음(a,e,i,o,u)중 하나가 포함되어 있어야 함
조건 2. 모음이 3개 또는 자음이 3개 연속으로 나오면 안됨
조건 3. 같은 글자가 연속으로 두 번 나오면 안되지만 'oo'나 'ee'는 됨
조건 4. end가 들어오면 종료


🔨 해결방법

  1. 모음 판별 변수 1개, 자음 판별 변수 1개, 조건 충족 확인용 변수 2개 선언
    - 모음이 확인되었을 때 0으로 초기화되어 있던 변수를 1로, 모음이나 자음이 세 번 연속으로 나왔을 때 혹은 같은 알파벳이 두 번 연속으로 나왔을 때 1로 초기화 되어있던 변수를 0으로 저장(1은 ture 0은 false)

  2. 자음이 확인되었을 때는 모음 판별 변수를 0으로, 모음이 확인되었을 때는 자음 판별 변수를 0으로 바꿔줌 (앞에 모음이 1개든 2개든 자음이 나오면 상관없어지기 때문)

  3. 자음 판별 변수와 모음 판별 변수가 3의 값을 가지면 break;

  4. 조건 충족 확인용 변수가 모두 1일 때 'is acceptable', 아니라면 'is not acceptable' 출력


🔨 코드

#include <iostream>
using namespace std;

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	string word;
	int consonant, vowel, first, second;

	while (1) {
		
		consonant = 0, vowel = 0, first =0, second=1;
		cin >> word;

		if (word == "end") break;

		
		for (int i = 0; i < word.size(); i++) {

			if (word[i] == 'a' || word[i] == 'e' || word[i] == 'i' || word[i] == 'o' || word[i] == 'u') {
				first = 1;
				vowel++;
				consonant = 0;
			}
			else {
				consonant++;
				vowel = 0;
			}

			if (vowel == 3 || consonant == 3) {
				second = 0;
				break;
			}

			
            if (word[i] == 'e' && word[i + 1] == 'e' || word[i] == 'o' && word[i + 1] == 'o') {
                continue;
            }

            else if (word[i] == word[i + 1]) {
                second = 0;
                break;
            }
			
			
		}
		if (first ==1 && second ==1) cout << "<" << word << ">" << " is acceptable." << '\n';
		else cout << "<" << word << ">" << " is not acceptable." << '\n';		
	
	}

	return 0;
}

솔직히 풀긴 풀었지만, 조건을 어떤 식으로 나눠줘야 하나 고민이 됐었던 문제였고, 이런 문제는 또씨 하나 안틀리고 출력하는게 중요한데 너무 거기에만 집중한 나머지 모음 확인에서 e를 두 번 써가지고 '틀렸습니다'만 5번 봤다;; 아쉬우어어어ㅓ어라

profile
자자 선수입장~

0개의 댓글