- λ°±μ€ # 5525 IOIOI
- μ¬μ© μΈμ΄ : C++
- λμ΄λ : μ€λ²β π₯
λ¬Έμ λ κ°λ¨νλ€. μ°μ Iμ Oλ‘ μ΄λ£¨μ΄μ§ λ¬Έμ₯κ³Ό N, Mκ°μ΄ μ£Όμ΄μ§λ€. μ΄λ, μ£Όμ΄μ§ λ¬Έμ₯μμ μ΄ λͺλ² λμ€λμ§ μΆλ ₯νλ λ¬Έμ μ΄λ€.
μ΄ λ¬Έμ μ κ²½μ°, μ ν 쑰건μ λ°λΌ λ°μ μ μλ μ μκ° λ¬λλ€.
μ°λ¦¬λ IOIλΌλ ν¨ν΄μ μ°μ μ°ΎμμΌνλ€. μ΄λ, IOI
ν¨ν΄μ μμμ Nλ§νΌμ© λͺλ² λ°λ³΅νλμ§λ₯Ό μμμΌνλ€.
λ§μ½ μ£Όμ΄μ§ λ¬Έμ₯μ΄ IOIOIOI
μ΄κ³ , N=2λΌλ©΄,
IOIOIOI
IOIOIOI
μ΄λ κ² λ κ°μ§κ° λμ¨λ€.
IOIOIOI
μ λλ²μ§Έ I λΆν° μΈλ²μ§Έ IκΉμ§μ ꡬκ°μ μ€λ³΅λμ΄μ μΈμ΄μ§λ κ²μ νμΈν μ μλ€.
μ΄λ₯Ό ν΅ν΄, λ¬Έμλ€μ νλ²λ§ μΈμΌ νλ κ²μ΄ μλλΌ, ν¨ν΄μ ν¬ν¨λμ΄μκ³ ν¨ν΄λ΄μμμ μμΉλ§ λ€λ₯΄λ€λ©΄ μ€λ³΅ν΄μ μΈμ΄μ£Όμ΄μΌ νλ€λ κ²μ μ μ μλ€.
λν, IOIλΌλ ν¨ν΄μ΄ λͺλ² λ°λ³΅λλμ§ μλ€λ©΄ μ΄ λͺ λ² λμ€λ μ§λ μ μ μλ€.
μμλ‘ λ λ¬Έμ₯μ κΈΈμ΄λ 7μ΄κ³ , μ΄ λ¬Έμ₯μμλ IOIν¨ν΄λ§μ΄ λ°λ³΅λκ³ μλ€. IOI ν¨ν΄μ λ°λ³΅ νμλ Oμ λ±μ₯ νμμ κ°κ³ , Oμ κ²½μ° λ¬Έμ₯κΈΈμ΄μ μ½ μ λ°μ μ°¨μ§νκ³ μλ€. (Oκ°μ = 3)
μ΄κ²μ κ·μΉμΌλ‘ λ§λ€μ΄λ³΄μ.
IOI ν¨ν΄λ§μ΄ λ°λ³΅λλ κ²½μ°, λ¬Έμμ΄μ κΈΈμ΄ / 2
μ λͺ«μ IOI ν¨ν΄μ κ°μκ° λλ€.
IOI ν¨ν΄μ κ°μ =[ λ¬Έμμ΄μ κΈΈμ΄ / 2 ]μ λͺ«
μ΄μ , IOI ν¨ν΄μ κ°μμ μ κ°μμ μ°κ΄μ±μ μ°Ύμ보μ.
μμμ IOI ν¨ν΄ κ°μλ 3μ΄λ€.
λ§μ½ N=1μ΄λΌλ©΄, μ 3λ² λνλλ€.
λ§μ½ N=2μ΄λΌλ©΄, μ 2λ² λνλλ€.
λ§μ½ N=3μ΄λΌλ©΄, μ 1λ² λνλλ€.
μ κ°μλ IOI ν¨ν΄ κ°μ - (N-1)
κ³Ό λμΌνλ€λ κ·μΉμ μ°Ύμ μ μλ€.
μ κ°μ = IOI ν¨ν΄ κ°μ - (N-1)
κ·Έλ λ€λ©΄ μ°λ¦¬λ μ£Όμ΄μ§ λ¬Έμ₯μμ 무μμ μ°ΎμμΌν κΉ?
μ°μ IOIκ° μ°μλ ꡬκ°λ€μ μμμΌν κ²μ΄λ€.
μ΄ κ΅¬κ°μ μλ€λ©΄, ꡬκ°λ§λ€ μμμ μ°ΎμλΈ κ·μΉμ μ μ©νμ¬, μ΄ μ κ°μλ₯Ό μμλΌ μ μμ κ²μ΄λ€.
IOIκ° μ°μλ ꡬκ°μ μ°ΎκΈ° μν΄μ, μ€νμ μ¬μ©ν κ²μ΄λ€.
μ°λ¦¬λ μ£Όμ΄μ§ λ¬Έμ₯μ ν λ¬Έμμ© μ½μΌλ©΄μ, IOIμ ν¨ν΄κ³Ό μΌμΉνλμ§ μλμ§λ₯Ό νλ¨ν΄μΌ νλ€. λ΄κ° νμ¬ μ½κ³ μλ λ¬Έμκ° ν¨ν΄μ μ ν©νμ§λ₯Ό μκΈ° μν΄μλ μ΄μ λ¬Έμκ° λ¬΄μμΈμ§ μμμΌνλ€.
λ°λΌμ, λ¬Έμλ₯Ό μ½μ ν, μ€νμ topμ μ‘°ννμ¬ νμ¬ λ¬Έμλ₯Ό μ€νμ λ£μμ λ IOI ν¨ν΄μ μ μ§ν μ μλμ§λ₯Ό νμΈν κ²μ΄λ€.
λ§μ½ IOI ν¨ν΄μ μ μ§ν μ μλ λ¬ΈμλΌλ©΄, λμ΄μ IOI ν¨ν΄μ μ°μλ ꡬκ°μ΄ μλλΌλ μλ―Έμ΄λ―λ‘, μ€νμ μλ μ°μλ IOI ν¨ν΄λ€μμ μ κ°μλ₯Ό ꡬνκ³ , μ€νμ λΉμΈ κ²μ΄λ€.
λ¬Έμλ₯Ό μ€νμ λ£μμ§ λ§μ§ κ²°μ νλ κ·μΉμ μλμ κ°μ΄ μ€μ νμλ€.
- νμ¬ μ½μ λ¬Έμκ°
O
μΈ κ²½μ°
- μ€νμ topμ΄I
β‘ κ·μΉ λ§μ‘± β: μ€νμ push
- μ€νμ΄ λΉμ΄μμ β‘ κ·μΉ λΆλ§μ‘± β : κ·Έλ₯ λ²λ¦¬κΈ°
- μ€νμ topμ΄O
β‘ κ·μΉ λΆλ§μ‘± β : μ€νμ μλO
μ κ±° ν, κ°μ κ³μ° & μ€ν λΉμ°κΈ°
- νμ¬ μ½μ λ¬Έμκ°
I
μΈ κ²½μ°
- μ€νμ΄ λΉμ΄μμ β‘ κ·μΉ λ§μ‘± β: μ€νμ push
- μ€νμ topμ΄O
β‘ κ·μΉ λ§μ‘± β: μ€νμ push
- μ€νμ topμ΄I
β‘ κ·μΉ λΆλ§μ‘± β : κ°μ κ³μ° & μ€ν λΉμ°κΈ°
μμ ꡬν μ¬νμ μλμ κ°μ΄ μμ±νμλ€.
#include <iostream>
#include <stack>
using namespace std;
int cnt=0;
int N,M;
int i;
char c;
stack<char> s;
void count();
int main()
{
cin >> N;
cin >> M;
for(i=0;i<M;i++){
cin >> c;
if(c=='O'){ // νμ¬ λ¬Έμκ° OμΈ κ²½μ°
if (s.empty()) // μ€νμ΄ λΉ κ²½μ°
continue;
else if(s.top() == 'I') // μ€νμ topμ΄ IμΈ κ²½μ°
s.push(c);
else{ // μ€νμ topμ΄ OμΈ κ²½μ°
s.pop();
count();
}
}else{ // νμ¬ λ¬Έμκ° I μΈ κ²½μ°
if(!s.empty() && s.top()=='I' ) // μ€νμ΄ λΉμ΄μκ±°λ topμ΄ IμΈ κ²½μ°
count();
s.push(c);
}
}
if(!s.empty()){
if(s.top()=='I')
count();
else{
s.pop();
count();
}
}
cout<<cnt;
return 0;
}
void count(){
int pNum = s.size()/2-(N-1) ;
if(pNum>0)
cnt+=pNum;
s = stack<char>();
}
μμ μ½λλ μμ νμ μ½λμ΄λ€.
μμ μ μ½λμμ κ°κ³Όνλ λΆλΆλ€μ μ§κ³ λμ΄κ°κ³ μ νλ€.
μμμ λ¬Έμ λ₯Ό λΆμν λ, μ κ³μ°νλ μμ μμ±νμλ€.
μ κ°μ = IOI ν¨ν΄ κ°μ - (N-1)
μ΄ λ΄μ©μ countν¨μλ‘ κ΅¬ννμλ€.
void count(){
int pNum = s.size()/2-(N-1) ;
cnt+=pNum;
s = stack<char>();
}
κ·Έλ°λ° μ΄ μμμμ μ£Όμν΄μΌ ν μ μ, IOI ν¨ν΄ κ°μκ° N-1λ³΄λ€ μμ μλ μλ€λ κ²μ΄λ€.
λ°λΌμ, λ³λμ 쑰건μμ΄ μμ±νλ©΄ μ κ°μκ° μμκ° λμ€κ² λκ³ , λΉμ°ν νλ¦° κ²°κ³Όλ₯Ό μ»κ² λλ€.
λ°λΌμ, κ° μμκ° λ κ²½μ° μ 체 κ²°κ³Όμ λ°μμ΄ μλλλ‘ μμ νμλ€.
void count(){
int pNum = s.size()/2-(N-1) ;
if(pNum>0)
cnt+=pNum;
s = stack<char>();
}
μ΄μ²λΌ μ΄λ ν κ·μΉμ μμμΌλ‘ μμ±ν λλ, κ·Έ μμ΄ μμΈμ μΈ κ²°κ³Όλ₯Ό λ°°μΆνμ§λ μλμ§ κ³ λ €λ₯Ό κΌΌκΌΌν ν΄λ³΄μμΌ νλ€.
μ½λ μ€ν μ€ λ¬΄μΈκ° μ€λ₯κ° λ°μν μν©μ΄λ€.
λλ²κΉ
μ ν΅ν΄, μ€νμ μ κ·Ό μ€ μλͺ»λ λΆλΆμ΄ μλ€λ μ¬μ€μ νμΈνλ€.
λμ λ‘μ§μλ μ€νμ topμ μ‘°ννλ λΆλΆμ΄ μ‘΄μ¬νλ€.
κ·Έλ¬λ μ€νμ΄ λΉμ΄μλ κ²½μ°, topμ μ‘°ννκ² λλ©΄ μ€λ₯κ° λ°μνλ€.
if (s.empty()) // μ€νμ΄ λΉ κ²½μ°
continue;
else if(s.top() == 'I') // μ€νμ topμ΄ IμΈ κ²½μ°
s.push(c);
else // μ€νμ topμ΄ OμΈ κ²½μ°
{
s.pop();
count();
}
λ°λΌμ μμ κ°μ΄ emptyμ¬λΆλ₯Ό νλ¨νλ 쑰건μ λ¨Όμ λ°°μΉν΄μ£Όμ΄μΌ μ€λ₯κ° λ°μνμ§ μκ² λλ€.
κ·μΉμ μ°Ύλ λ¬Έμ λ μμΈμ¬νμ μλ²½νκ² μ²λ¦¬νλ λ°©λ²μ μ μκ°νλ©΄ νλ°©μ ν리μ§λ§, μ¬κΈ°μ κΈ° λΉ κ΅¬μλ€μ΄ μ‘΄μ¬νλ©΄ νμμ΄ ν리λ λ¬Έμ μΈ κ² κ°λ€.
π λ΄κ° μκ°νλ κ²λ³΄λ€ λ κΌΌκΌΌνκ² μκ°νκΈ°!