๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ/BOJ

[BOJ] #1522 ๋ฌธ์ž์—ด ๊ตํ™˜

by dar0m! 2021. 3. 5.
์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ •๋‹ต ๋น„์œจ
 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

๋Œ“๊ธ€