본문 바로가기

BAEKJOON/문자열

백준 32297번 [문자열을 만들어요](C++) -yes6686- 티스토리

728x90
반응형
SMALL

백준 문제 풀이: 32297 (가오리의 영어 이름은?)


문제 링크: https://www.acmicpc.net/problem/32297

문제 설명:

상혁이는 영어 문장에서 '가오리(gori)'라는 문자열이 등장하는지를 확인하고 싶어합니다. 주어진 문자열에 "gori"라는 단어가 연속된 부분 문자열로 등장하면 "YES"를 출력하고, 그렇지 않으면 "NO"를 출력하는 간단한 문자열 탐색 문제입니다.


문제 해결 코드


// 'gori'가 연속된 문자열로 포함되어 있는지 확인
#include <iostream>
using namespace std;

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

    int n;
    cin >> n;

    string s;
    cin >> s;

    // 문자열을 한 글자씩 탐색하며 "gori" 등장 여부 확인
    for (int i = 0; i < n - 3; i++) {
        if (s[i] == 'g' && s[i+1] == 'o' && s[i+2] == 'r' && s[i+3] == 'i') {
            cout << "YES" << '\n';
            return 0;
        }
    }
    cout << "NO" << '\n';
}

코드 설명

  • 핵심 알고리즘: 문자열 슬라이딩 윈도우 방식으로 부분 문자열 탐색. 길이 4의 부분 문자열이 "gori"인지 순차적으로 검사합니다.
  • 구현 세부사항:
    • n - 3까지 인덱스를 반복하면서 현재 위치에서 4글자가 "gori"인지 체크
    • 찾는 순간 "YES" 출력 후 종료, 끝까지 못 찾으면 "NO" 출력
  • 시간 복잡도 분석: O(n) — 문자열 길이만큼 순차적으로 한 번만 검사

결과

문자열 안에 "gori"라는 부분 문자열이 포함되어 있는지 여부를 출력합니다.

예시 입력:

15
ilovegorithm

예시 출력:

YES

간단한 문자열 탐색 문제이지만, 부분 문자열을 정확히 찾는 기초 로직 연습에 좋습니다. KMP 등 고급 알고리즘이 필요한 경우는 아니지만, 문자열 처리에 익숙해지기에 좋은 문제입니다!

728x90
반응형
LIST