[백준 24073] ビ太郎と IOI (Bitaro and IOI) (C#, C++) - soo:bak
작성일 :
문제 링크
24073번 - ビ太郎と IOI (Bitaro and IOI)
설명
문자열에서 순서대로 I, O, I가 등장하는 비연속 부분수열이 존재하는지 판별하는 문제입니다.
접근법
왼쪽부터 순회하며 I를 찾고, 그 이후에 O를 찾고, 다시 그 이후에 I를 찾으면 성공입니다.
각 단계를 통과했는지 상태를 관리하며 한 번 순회합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
class Program {
static void Main() {
_ = Console.ReadLine();
var s = Console.ReadLine()!;
var seenI = false;
var seenIO = false;
foreach (var c in s) {
if (!seenI && c == 'I') seenI = true;
else if (seenI && !seenIO && c == 'O') seenIO = true;
else if (seenIO && c == 'I') {
Console.WriteLine("Yes");
return;
}
}
Console.WriteLine("No");
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
string s; cin >> s;
int state = 0;
for (char c : s) {
if (state == 0 && c == 'I') state = 1;
else if (state == 1 && c == 'O') state = 2;
else if (state == 2 && c == 'I') state = 3;
}
cout << (state == 3 ? "Yes" : "No") << "\n";
return 0;
}