[BOJ] #1522 λ¬Έμμ΄ κ΅ν
μκ° μ ν | λ©λͺ¨λ¦¬ μ ν | μ λ΅ λΉμ¨ |
2 μ΄ | 128 MB | 43.590% |
1522λ²: λ¬Έμμ΄ κ΅ν
aμ bλ‘λ§ μ΄λ£¨μ΄μ§ λ¬Έμμ΄μ΄ μ£Όμ΄μ§ λ, aλ₯Ό λͺ¨λ μ°μμΌλ‘ λ§λ€κΈ° μν΄μ νμν κ΅νμ νμλ₯Ό μ΅μλ‘ νλ νλ‘κ·Έλ¨μ μμ±νμμ€. μ΄ λ¬Έμμ΄μ μνμ΄κΈ° λλ¬Έμ, μ²μκ³Ό λμ μλ‘ μΈμ ν΄
www.acmicpc.net
λ¬Έμ
aμ bλ‘λ§ μ΄λ£¨μ΄μ§ λ¬Έμμ΄μ΄ μ£Όμ΄μ§ λ, aλ₯Ό λͺ¨λ μ°μμΌλ‘ λ§λ€κΈ° μν΄μ νμν κ΅νμ νμλ₯Ό μ΅μλ‘ νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ΄ λ¬Έμμ΄μ μνμ΄κΈ° λλ¬Έμ, μ²μκ³Ό λμ μλ‘ μΈμ ν΄ μλ κ²μ΄λ€.
μλ₯Ό λ€μ΄, aabbaaabaabaμ΄ μ£Όμ΄μ‘μ λ, 2λ²μ κ΅νμ΄λ©΄ aλ₯Ό λͺ¨λ μ°μμΌλ‘ λ§λ€ μ μλ€.
첫째 μ€μ λ¬Έμμ΄μ΄ μ£Όμ΄μ§λ€. λ¬Έμμ΄μ κΈΈμ΄λ μ΅λ 1,000μ΄λ€.
첫째 μ€μ νμν κ΅νμ νμμ μ΅μκ°μ μΆλ ₯νλ€.
ν΄κ²°
key point, μ¬λΌμ΄λ© μλμ°
- μ°μλ bλ₯Ό λ§λ€κΈ° μν΄μ μ λ ₯μΌλ‘ μ£Όμ΄μ§ λ¬Έμμ΄μμ bκ°μ κ°μλ₯Ό μΈμ΄ μ μ₯νλ€. → size
- μ΄ λ¬Έμ μμ λ¬Έμμ΄μ μνμ΄λ€. λ°λΌμ λ¬Έμμ΄μ νλ² λ μ΄μ΄ λΆμ¬μ€λ€ → str += str;
- μ΄λ κ² λλ©΄, 0λΆν° str.length()κΉμ§ 보면μ, μ¬λΌμ΄λ© μλμ°λ‘ μλμ° ν¬κΈ°(L)λ§νΌ λ³Ό λ μνμ λͺ¨μμΌλ‘ μ λΆ νμΈν μ μλ€.
- μ¬κΈ°μ μλμ° ν¬κΈ°λ λ°λ‘ sizeκ° λλ€.
- μ΄μ , 0 λΆν° str.length()κΉμ§ λͺ¨λ iμ λν΄μ str[i]κ° 'b'λΌλ©΄ queueμ μΈλ±μ€ iλ₯Ό λ£μ΄μ€λ€.
- bκ° μ‘΄μ¬ν μμΉμ λμμ νμ¬ λ³΄κ³ μλ ꡬκ°μ μλ bμ κ°μλ₯Ό λ°λ‘ μ μ μλ€. → q.size()
- i - q.front() κ° size λ³΄λ€ κ°κ±°λ ν¬λ€λ©΄, ꡬκ°μ λ²μλ₯Ό λμ΄μ κ²μ΄λ―λ‘ queueμμ μ κ±°νλ€. → q.pop()
- κ΅ν νμμ μ΅μκ°μ ꡬνκΈ° μν΄μλ minν¨μλ₯Ό μ΄μ©ν΄μ, size - q.size()μ μ΅μκ°μ ꡬνλ€.
- μ°λ¦¬κ° ꡬνκ³ μ νλ sizeλ μ°μλ(λμ΄μΌνλ) bμ κ°μμ΄λ©°, q.size()λ νμ¬ λ³΄κ³ μλ ꡬκ°μ bμ κ°μμ΄λ€.
- size - q.size() μ κ°μ΄ λ°λ‘ ꡬκ°μ μλ aμ κ°μκ°λκ³ μ¦, κ΅ν νμκ° λλ€.
- λ°λΌμ λͺ¨λ ꡬκ°μ λν΄μ size - q.size()μ μ΅μκ°μ ꡬνλ€λ©΄ μ λ΅μ μ°Ύμ μ μλ€.
μ½λ
λ©λͺ¨λ¦¬ | μκ° |
2020 KB | 0 ms |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include <iostream>
#include <queue>
#include <algorithm>
#include <string>
using namespace std;
string str;
int main() {
cin >> str;
int size = 0;
for (int i = 0; i < str.length(); i++) {
if (str[i] == 'b') size++;
}
str += str;
int ans = size;
queue<int> q;
for (int i = 0; i < str.length(); i++) {
if (!q.empty() && i - q.front() >= size) q.pop();
if (str[i] == 'b') q.push(i);
ans = min(ans, size - (int)q.size());
}
printf("%d", ans);
return 0;
}
|
cs |