BAEKJOON/구현

백준 11094번 [꿍 가라사대](C++) -yes6686- 티스토리

yes6686 2025. 6. 5. 15:11
728x90
반응형
SMALL

백준 문제 풀이: 11094 (복권)


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

문제 설명:

입력으로 n개의 문장이 주어진다. 이 중에서 문장의 앞 10글자가 "Simon says"인 문장만을 찾아, 그 뒤에 이어지는 부분을 출력하는 문제이다. 만약 "Simon says"로 시작하지 않는다면 무시한다.

즉, "Simon says"라는 구문은 특정 명령을 의미하고, 그 구문이 있을 때만 뒤의 내용을 출력하는 형태이다.


문제 해결 코드


// 11094번: 복권
// "Simon says"로 시작하는 문장만 필터링해서 그 이후 문자열 출력

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

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

    int n;
    cin >> n;
    cin.ignore();  // 개행 문자 처리

    string s;
    for (int i = 0; i < n; i++) {
        getline(cin, s);
        if (s.length() < 10) continue;  // 길이 짧은 문장은 건너뛰기

        string sl = s.substr(0, 10);      // 앞 10글자
        string sr = s.substr(10);         // 나머지 부분

        if (sl == "Simon says") {
            cout << sr << '\n';          // 조건 일치 시 출력
        }
    }
}

코드 설명

코드의 주요 로직과 사용된 알고리즘 설명.

  • 핵심 알고리즘: 문자열 전처리 및 조건 필터링.
  • 구현 세부사항:
    • cin.ignore(): 개행 문자가 getline()에 영향을 주지 않도록 방지.
    • s.substr(0, 10): 앞 10글자가 "Simon says"인지 확인.
    • s.substr(10): 명령어 이후의 텍스트만 출력.
  • 시간 복잡도 분석:O(n ⋅ m), 여기서 n은 문장 수, m은 각 문장의 평균 길이.

결과

"Simon says"로 시작하는 문장만 추출하여 그 이후 텍스트만 출력합니다.

예시 입력:
4
Simon says jump
Just do it
Simon says dance
Hello world

예시 출력:
 jump
dance

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
반응형
LIST