Problem Solving/BOJ

[백준 / BOJ] C++ 15786 Send me the money

nageune 2023. 5. 15. 01:41
728x90
반응형

15786번: Send me the money

 

문제

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

 

15786번: Send me the money

입력의 첫째 줄에 석규가 기억하는 원본 알파벳의 수 N(1 ≤ N ≤ 100)과 포스트잇의 개수 M(1 ≤ M ≤ 1000)이 주어진다. 다음 줄에 길이가 N인 알파벳 대문자로 이루어진 문자열 S가 주어진다. 이 후 M

www.acmicpc.net

 

 

풀이

기억하는 원본 알파벳의 각 글자가 순서대로 있는지 포스트잇의 문자열에서 찾으면 된다. 문자열의 find 메소드로 원본의 0번 index의 글자를 포스트잇의 처음부터 찾고 존재한다면 그 위치 + 1부터 1번 index의 글자를 찾으며 반복한다. 중간에 찾을 수 없다면 flag를 1로 바꾸고 멈춘다. 모든 알파벳을 순서대로 찾았다면 flag는 0일 것이고 가능한 포스트잇이다. 따라서 flag가 1이면 false, 0이면 true를 출력한다.

 

 

코드

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

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n, m;
  string a, b;
  cin >> n >> m >> a;
  while (m--) {
    cin >> b;
    int idx = 0, flag = 0;
    for (int i = 0; i < n; i++) {
      if (b.find(a[i], idx) != -1)
        idx = b.find(a[i], idx) + 1;
      else {
        flag = 1;
        break;
      }
    }
    if (flag)
      cout << "false\n";
    else
      cout << "true\n";
  }
  return 0;
}

 

728x90
반응형