[BOJ] #16171 - 나는 친구가 적다 (Small)

👻 나는 친구가 적다 (Small)

👉🏻 문제 보러가기 👈🏻


🌱 문제

친구가 적은 성민이는 수업에 결석해도 시험이나 과제에 대한 정보를 제대로 얻을 수 없었다. F 학점을 받을 위기까지 아슬아슬하게 결석일 수를 유지하던 성민이는, 어느 날 갑자기 영문도 모른 채 쪽지시험을 보게 되었다!

갑작스러운 쪽지 시험으로 마음이 급해진 성민이는 매직아이를 사용해 벼락치기를 하기로 한다.

성민이가 듣는 과목의 교과서는, 알파벳 소문자(a-z)와 알파벳 대문자(A-Z)로만 이루어져있다. 성민이가 교과서에서 찾고자 하는 키워드도 역시 알파벳 소문자와 대문자로만 이루어져있다. 하지만, 성민이에겐 큰 문제가 생겼다. 결석한 날의 수업 내용을 친구에게 빌려 필기를 하던 중, 교과서에 숫자(0-9)를 적어버린 것이다.

키워드를 찾기 힘들어 패닉에 빠진 성민이는 몇 안 되는 친구인 당신에게 도움을 요청했다. 성민이를 도와, 교과서에서 성민이가 찾고자 하는 키워드의 존재 여부를 알려주자.

  • 시간 제한 : 1초 (추가 시간 없음)
  • 메모리 제한 : 128 MB

🌱 입력

첫 번째 줄에는 알파벳 소문자, 대문자, 숫자로 이루어진 문자열 S가 주어진다. (1 ≤ |S| ≤ 100) 두 번째 줄에는 성민이가 찾고자 하는 알파벳 소문자, 대문자로만 이루어진 키워드 문자열 K가 주어진다. (1 ≤ |K| ≤ 100).
단, 입력으로 들어오는 키워드 문자열 K의 길이는, 교과서의 문자열 S보다 짧거나 같다.


🌱 출력

첫 번째 줄에 성민이가 찾고자 하는 키워드가 문자열 내에 존재하면 1, 존재하지 않으면 0을 출력한다.


🌱 예제


🪐 입출력 1

  • 입력
    1q2w3e4r5t6y
    qwerty
    
  • 출력
    1
    

“1q2w3e4r5t6y”라는 문자열에서 “qwerty”라는 문자열을 찾을 수 있다.
👉🏻 2, 4, 6, 8, 10, 12번째의 q, w, e, r, t, y를 보면 존재한다는 것을 알 수 있다.


🪐 입출력 2

  • 입력
    1ovey0uS2
    veS
    
  • 출력
    0
    

“1ovey0uS2”라는 문자열에서 “veS”라는 문자열의 구성 요소인 v, e, S는 각각 원래 문자열의 3, 4, 8번째 위치에 존재하지만
연속된 문자열이 아니기 때문에 찾고자 하는 키워드는 원래 문장에 존재하지 않는다.
👉🏻 veyu, eyu, uS, ovey는 문자열 내에 존재하는 키워드이다.


👻 풀이

#include <iostream>
#include <string>
#include <regex>
using namespace std;
string s, k;
int main()
{
    ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    // 나는 친구가 적다 (Small)
    cin >> s >> k;
    s = regex_replace(s, regex("[0-9]"), "");
    if(strstr(s.c_str(), k.c_str())) cout << "1";
    else cout << "0";
    return 0;
}
  • 시간 : 0 ms
  • 메모리 : 2180 KB

👻 글을 마치며

난이도가 이제껏 풀었던 아이들 중에 높아서 오래 걸릴 줄 알았는데 생각보다 금방 풀었다. 알고리즘은 금방 생각해내긴 했는데 다른 채점 결과에 비해 메모리 사용이 조금 높다..🥲 다른 사람들은 2024 KB 정도 나오던데.. 어느 부분이 메모리를 조금 더 차지했는지 살펴봐야겠다.


소스코드 보러가기

Categories:

Updated:

Leave a comment