BOJ
백준 5525번: IOIOI
혀내
2022. 1. 31. 22:48
반응형
풀이
- 첫 번째 풀이 방법 (50점)
for (int i = 0; i < S.length(); i++) {
if (S.at(i) == 'I') {
bool isI = true;
int cnt = 1;
for (int j = i+1; j < S.length(); j++) {
if (S.at(j) == 'O') {
if (!isI) break;
else {
isI = false;
}
}
else if (S.at(j) == 'I') {
if (isI) break;
else {
isI = true;
if (++cnt == N+1) break;
}
}
}
if (cnt == N + 1) {
result++;
}
}
}
처음엔 이중 for 반복문으로 한 문자씩 'I'인지, 'O'인지 비교해가며 문제를 풀었는데, 겨우 50점이라는 부분 점수만 받을 수 있었다 🤤..
- 두 번째 풀이 방법 (100점)
#include <iostream>
using namespace std;
int N, M, result = 0;
string S;
void init() {
cin.tie(0); cout.tie(0);
ios_base::sync_with_stdio(0);
}
int main() {
init();
cin >> N >> M;
cin >> S;
for (int i = 0; i < M; i++) {
int cnt = 0;
if (S[i] == 'I') {
while (S[i+1] == 'O' && S[i+2] == 'I') {
cnt++;
if (cnt == N) {
result++;
cnt--;
}
i += 2;
}
}
}
cout << result;
}
시간이 오래 걸리는 문제로 부분 점수를 받은 것 같아서 'IOI'를 하나의 for 반복문에서 한 번에 확인하도록 코드를 다시 짰다. 그리고 한 번에 S[i], S[i+1], S[i+2] 를 모두 검사하기 때문에 i를 2씩 더해주면서 이미 검사한 부분은 넘어가도록 만들었다.
반응형