[백준/C++] 2954 - 창영이의 일기장

orangesnail·2025년 8월 12일

백준

목록 보기
138/169

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


구현하기

size_t 타입으로 문자열의 길이를 표현할 수 있다. for문에서 int i = 0 대신에 size_t i = 0 이런 식으로 넣어주면 된다.

입력받은 문자열의 각 문자에 대해

  1. 먼저 정답 배열에 해당 문자를 추가해준다.
  2. 해당 문자가 모음이라면 인덱스를 3 건너뛴다. (모음이라면 해당 문자 뒤에 p와 해당문자가 한번 더 있기 때문에 해석에 필요 없는 값이라 건너뛰어야 한다.)
  3. 해당 문자가 모음이 아니라면 인덱스를 1 건너뛰어 바로 다음 문자로 넘어간다.

이렇게 현재 문자가 어떤 문자인지에 따라 인덱스의 증가량이 바뀌기 때문에 일반적인 for (int i = 0; i < sen.length(); i++) 를 쓸 수 없다. 인덱스 증가량을 아래처럼 조건문으로 처리해줘야 한다.

#include <iostream>
#include <string>
using namespace std;

bool isVow(char c) {
    return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}

int main() {
    string sen;
    getline(cin, sen);

    string answer;
    for (size_t i = 0; i < sen.length();) {
        char current = sen[i];
        answer.push_back(current);

        if (isVow(current)) i += 3;
        else i += 1;
    }
    cout << answer << endl;
    return 0;
}
profile
초보입니다. 피드백 환영합니다 😗

0개의 댓글