백준5530 JOIOI탑 작성일 2019-08-24 | In JOI 문제 링크 http://icpc.me/5530 문제 출처 2013 JOI 4번 사용 알고리즘 파라메트릭 서치 그리디 시간복잡도 O(NlogN) 풀이 맨 뒤 x개의 I는 항상 끝나는 I로 잡아서 파라메트릭 서치를 돌려주면 됩니다. 전체 코드 1234567891011121314151617181920212223242526272829303132333435363738#include <bits/stdc++.h> using namespace std; int n; string s; vector<int> v; bool chk(int x){ int fail = v[v.size() - x]; int a = 0, b = 0, c = 0; for(int i=0; i<n; i++){ if(s[i] == 'J') a++; else if(s[i] == 'I' && i < fail) a++; else if(s[i] == 'O' && a > 0) b++, a--; else if(s[i] == 'I' && b > 0 && i >= fail) b--, c++; } return x == c; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> s; for(int i=0; i<n; i++){ if(s[i] == 'I') v.push_back(i); } int ans = 0; int l = 1, r = v.size(); while(l <= r){ int m = l + r >> 1; if(chk(m)){ ans = m; l = m + 1; }else{ r = m - 1; } } cout << ans; }