[백준] 4659, 비밀번호 발음하기 ,구현

YUN·2026년 3월 11일

C++

목록 보기
68/85

구현문제이다. 모음인지 자음인지를 확인하는 함수 isvowel()을 정의해놓고 main에서 모음,자음 구분 필요할때마다 호출해서 확인한다.

중요한것은..모음은 {a,e,i,o,u}로만 이루어져있고, 입력도 모음은 {a,e,i,o,u} 중에서만 나온다는 것이다.
(나는 모음이 전체가 나오는 건줄 알고,,카운팅 배열 만드려다가 이게맞나..싶어서 다른 방법 찾다가 틀렸다)

  • 조건 1
    • isvowel() 호출
  • 조건 2
    • 자음,모음 카운트 변수 만들고
    • 자음나오면 -> 자음카운트 1증가, 모음 카운트를 0으로
    • 모음 나오면 -> 모음 카운트 1증가, 자음 카운트를 0으로 만들어서
    • 자음 or 모음이 연속으로 나올떄만 카운트가 누적되도록 코드를 작성한다.
  • 조건 3
    • 문자열 연속 2개씩 순회하면서 둘다 같고 e또는 o아닌 경우를 찾아낸다.

1. 풀이

#include <bits/stdc++.h>
    
using namespace std;

char vowel[5]={'a','e','i','o','u'};
string s1 = " is acceptable.";
string s2 = " is not acceptable.";
int isvowel(char param) {
    for(char c:vowel) {
        if(param==c) return 1;
    }   
    return 0;
}

int main() {
    string s;
    while(cin >> s) {
        if(s=="end") break;
        int include,mo_cnt,ja_cnt, no_flag;
        include = mo_cnt = ja_cnt = no_flag = 0;
        for(char c:s) {
            if(isvowel(c)) include = 1, mo_cnt++, ja_cnt=0 ;
            else mo_cnt=0, ja_cnt++;
            if(mo_cnt==3||ja_cnt==3) {
                no_flag=1;
                break;
            }
        }
        for(int i=0;i<(int)s.size()-1;i++) {
            if(s[i]==s[i+1] && s[i]!='e' && s[i] != 'o') {
                no_flag=1;
                break;
            }
        }
        if(!include || no_flag) {
            cout << "<"+s+">"+s2+'\n';
            continue;
        }
        cout << "<"+s+">"+s1+'\n';
    }
    return 0;
}

2. 오답 노트

(1) 문제 예시 입력 잘보기

나는 입력도 모음이 {a,e,i,o,u}로만 이루어져 있다는 것을 뒤늦게 알았고, 그래서 틀렸다. 사실 예시 입력이 너무 길길래 문제 대충 이해하고 바로 풀이에 들어갔는데, 이게 패착인것같다.

귀찮더라도, 문제를 대충 다 이해한 것 같더라도 꼭 꼭 문제에서 주어지는 예시 입력은 확인해봐야한다.

(2) 연속으로 나오는 애들만 누적 카운트하기

 if(isvowel(c)) include = 1, mo_cnt++, ja_cnt=0 ;
 else mo_cnt=0, ja_cnt++;

위와 같이 코드를 작성하면 연속으로 등장하는 애들만 카운트가 가능하다.

연속으로 몇개 등장하는지 문제가 매우 많으니, 위의 코드 블럭을 사용할 곳이 많을 것 같다.

(3) 반복적으로 쓰이는 기능 함수화하기

이 문제의 풀이를 보면 반복적으로 쓰이는 모음인지 확인 하는 기능은 따로 함수 isvowel()로 정의해뒀다.

이렇게 자주 쓰이는 기능은 위처럼 함수화해줘야 코드의 복잡도가 낮아지고, 코드도 짧아진다.

(4) 구현 문제는 그냥 노가다든 뭐든 풀기만하면된다.

구현 문제는 그냥 복잡하게 생각하지말고 하라는대로 하면 될 것 같다.

profile
안녕하세요. 전자공학부 학부생의 공부 기록입니다.

0개의 댓글