๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€] 17615๋ฒˆ ๋ณผ ๋ชจ์œผ๊ธฐ (Python)

mallin 2024. 8. 28. 19:30

https://www.acmicpc.net/problem/1213

๐Ÿ“Œ ๋ฌธ์ œ

๋นจ๊ฐ„์ƒ‰ ๋ณผ๊ณผ ํŒŒ๋ž€์ƒ‰ ๋ณผ์ด <๊ทธ๋ฆผ 1>์—์„œ ๋ณด์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ผ์ง์„ ์ƒ์— ์„ž์—ฌ ๋†“์—ฌ ์žˆ์„ ๋•Œ, ๋ณผ์„ ์˜ฎ๊ฒจ์„œ ๊ฐ™์€ ์ƒ‰ ๋ณผ๋ผ๋ฆฌ ์ธ์ ‘ํ•˜๊ฒŒ ๋†“์ด๋„๋ก ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋ณผ์„ ์˜ฎ๊ธฐ๋Š” ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋ฐ”๋กœ ์˜†์— ๋‹ค๋ฅธ ์ƒ‰๊น”์˜ ๋ณผ์ด ์žˆ์œผ๋ฉด ๊ทธ ๋ณผ์„ ๋ชจ๋‘ ๋›ฐ์–ด ๋„˜์–ด ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๋นจ๊ฐ„์ƒ‰ ๋ณผ์€ ์˜†์— ์žˆ๋Š” ํŒŒ๋ž€์ƒ‰ ๋ณผ ๋ฌด๋”๊ธฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋›ฐ์–ด ๋„˜์–ด ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์œ ์‚ฌํ•˜๊ฒŒ, ํŒŒ๋ž€์ƒ‰ ๋ณผ์€ ์˜†์— ์žˆ๋Š” ๋นจ๊ฐ„์ƒ‰ ๋ณผ ๋ฌด๋”๊ธฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋›ฐ์–ด ๋„˜์–ด ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
  2. ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ณผ์˜ ์ƒ‰๊น”์€ ํ•œ ๊ฐ€์ง€์ด๋‹ค. ์ฆ‰, ๋นจ๊ฐ„์ƒ‰ ๋ณผ์„ ์ฒ˜์Œ์— ์˜ฎ๊ฒผ์œผ๋ฉด ๋‹ค์Œ์—๋„ ๋นจ๊ฐ„์ƒ‰ ๋ณผ๋งŒ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์œ ์‚ฌํ•˜๊ฒŒ, ํŒŒ๋ž€์ƒ‰ ๋ณผ์„ ์ฒ˜์Œ์— ์˜ฎ๊ฒผ์œผ๋ฉด ๋‹ค์Œ์—๋„ ํŒŒ๋ž€์ƒ‰ ๋ณผ๋งŒ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฒ˜์Œ์— ๋ณผ์ด <๊ทธ๋ฆผ 1>์—์„œ ๋ณด์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์žˆ์„ ๋•Œ, ๋นจ๊ฐ„ ๋ณผ์„ <๊ทธ๋ฆผ 2>์—์„œ ๋ณด์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์˜ฎ๊ธด ํ›„, <๊ทธ๋ฆผ 3>์—์„œ ๋ณด์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์˜ฎ๊ธด๋‹ค๋ฉด ๋‘ ๋ฒˆ ๋งŒ์— ๊ฐ™์€ ์ƒ‰๋ผ๋ฆฌ ๋ชจ์„ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ฉด์— ํŒŒ๋ž€์ƒ‰ ๋ณผ์„ ์„ ํƒํ•˜์—ฌ ์—์„œ ๋ณด์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์˜ฎ๊ธฐ๋ฉด(ํ™”์‚ดํ‘œ์— ์žˆ๋Š” ์ˆ˜๋Š” ์˜ฎ๊ธฐ๋Š” ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค) ๋„ค ๋ฒˆ์„ ์˜ฎ๊ฒจ์•ผ ๊ฐ™์€ ์ƒ‰์˜ ๋ณผ๋ผ๋ฆฌ ๋ชจ์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ผ์ง์„ ์ƒ์— ๋†“์—ฌ ์žˆ๋Š” ๋ณผ์— ๊ด€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๊ทœ์น™์— ๋”ฐ๋ผ ๋ณผ์„ ์ด๋™ํ•˜์—ฌ ๊ฐ™์€ ์ƒ‰๋ผ๋ฆฌ ๋ชจ์œผ๋˜ ์ตœ์†Œ ์ด๋™ํšŸ์ˆ˜๋ฅผ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

๐Ÿ“Œ ์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ๋ณผ์˜ ์ด ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 500,000) ๋‹ค์Œ ์ค„์—๋Š” ๋ณผ์˜ ์ƒ‰๊น”์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž R(๋นจ๊ฐ„์ƒ‰ ๋ณผ) ๋˜๋Š” B(ํŒŒ๋ž€์ƒ‰ ๋ณผ)๊ฐ€ ๊ณต๋ฐฑ ์—†์ด ์ฃผ์–ด์ง„๋‹ค. ๋ฌธ์ž์—ด์—๋Š” R ๋˜๋Š” B ์ค‘ ํ•œ ์ข…๋ฅ˜๋งŒ ์ฃผ์–ด์งˆ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ๋‹ต์€ 0์ด ๋œ๋‹ค.

 

 

๐Ÿ“Œ ์ถœ๋ ฅ

์ตœ์†Œ ์ด๋™ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


๐Ÿ“Œ ํ’€์ด ๋ฐฉ์‹ 

๋ณผ์„ ์˜ฎ๊ฒจ์„œ ๊ฐ™์€ ์ƒ‰ ๋ณผ๋ผ๋ฆฌ ์ธ์ ‘ํ•˜๊ฒŒ ๋†“์ด๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

๊ฐ™์€ ์ƒ‰ ๋ณผ๋ผ๋ฆฌ ์ธ์ ‘ํ•˜๊ฒŒ ๋†“๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— 

1. ๋ณผ์„ ์•ž์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒฝ์šฐ 

2. ๋ณผ์„ ๋’ค๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒฝ์šฐ

์ด ๋‘ ๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. 

 

<- ์•ž์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ์™ผ์ชฝ

-> ๋’ค๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์˜ 

๋ณผ์˜ ์ƒ‰๊ณผ ์ธ์ ‘๋˜์–ด ์žˆ๋Š” ๊ฐœ์ˆ˜๋งŒํผ์€ ์˜ฎ๊ธฐ์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์—

์˜ฎ๊ธฐ์ง€ ์•Š๋Š” ๊ฐœ์ˆ˜๋ฅผ ์ด ๊ฐœ์ˆ˜์—์„œ ๋นผ์ฃผ๊ณ  ์–ด๋–ค ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€์žฅ ์ ์€ ๋ณผ์„ ์˜ฎ๊ธฐ๋ฉด ๋˜๋Š”์ง€ ๊ณ„์‚ฐํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค !!

 

์ •๋ฆฌํ•ด๋ณด์ž๋ฉด ์ด 8๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๋ฅผ ๊ณ„์‚ฐ ํ›„ ๊ฐ€์žฅ ์ ๊ฒŒ ์˜ฎ๊ธฐ๋ฉด ๋˜๋Š” ๋ณผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

[๋ณผ์„ ์•ž์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒฝ์šฐ] 

๊ฐ€์žฅ ์™ผ์ชฝ ๋ณผ์ด ํŒŒ๋ž€์ƒ‰์ผ ๋•Œ

1. ์ด ํŒŒ๋ž€์ƒ‰ ๋ณผ - ๋งจ ์™ผ์ชฝ์— ์ธ์ ‘ํ•ด ์žˆ๋Š” ํŒŒ๋ž€์ƒ‰ ๋ณผ์˜ ๊ฐœ์ˆ˜ 

2. ์ด ๋นจ๊ฐ„์ƒ‰ ๋ณผ

 

๊ฐ€์žฅ ์™ผ์ชฝ ๋ณผ์ด ๋นจ๊ฐ„์ƒ‰์ผ ๋•Œ

3. ์ด ํŒŒ๋ž€์ƒ‰ ๋ณผ 

4. ์ด ๋นจ๊ฐ„์ƒ‰ ๋ณผ - ๊ฐ€์žฅ ์™ผ์ชฝ์— ์ธ์ ‘ํ•ด ์žˆ๋Š” ๋นจ๊ฐ„์ƒ‰ ๋ณผ์˜ ๊ฐœ์ˆ˜

 

[๋ณผ์„ ๋’ค๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒฝ์šฐ]

๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๋ณผ์ด ํŒŒ๋ž€์ƒ‰์ผ ๋•Œ

5. ์ด ํŒŒ๋ž€์ƒ‰ ๋ณผ - ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์ธ์ ‘ํ•ด ์žˆ๋Š” ํŒŒ๋ž€์ƒ‰ ๋ณผ์˜ ๊ฐœ์ˆ˜ 

6. ์ด ๋นจ๊ฐ„์ƒ‰ ๋ณผ

 

๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๋ณผ์ด ๋นจ๊ฐ„์ƒ‰์ผ ๋•Œ

7. ์ด ํŒŒ๋ž€์ƒ‰ ๋ณผ 

8. ์ด ๋นจ๊ฐ„์ƒ‰ ๋ณผ - ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์ธ์ ‘ํ•ด ์žˆ๋Š” ๋นจ๊ฐ„์ƒ‰ ๋ณผ์˜ ๊ฐœ์ˆ˜

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๊ทธ๋ƒฅ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ํ’€๋‹ค๋ณด๋‹ˆ ์ •๋‹ต์€ ๋งž์•˜์ง€๋งŒ ์‹œ๊ฐ„์ด 244 ms ๊ฐ€ ๋‚˜์˜ค๋”๋ผ๊ตฌ์š” ,, 

๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒํ•˜๋ฉด ์‹œ๊ฐ„๊ณผ ์ฝ”๋“œ๊ธธ์ด๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์„๊นŒ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€

count ์™€ find ๊ทธ๋ฆฌ๊ณ  min ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ฒ ๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

count ๋ฅผ ํ†ตํ•ด ์ด B ์™€ R ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์ฃผ๊ณ , 

find, rfind ๋ฅผ ํ†ตํ•ด ์ธ์ ‘ํ•œ ๋ณผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์ค๋‹ˆ๋‹ค. (๋งจ ์•ž์˜ ๋ณผ์ด B ๋ผ๋ฉด R ์ด ๊ฐ€์žฅ ์ฒ˜์Œ ๋‚˜์˜ค๋Š” ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ์ธ์ ‘ํ•ด ์žˆ๋Š” B ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹)

๊ทธ๋ฆฌ๊ณ  min ์„ ํ†ตํ•ด ๊ฐ€์žฅ ์ตœ์†Œ ์ด๋™ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•ด์คฌ์Šต๋‹ˆ๋‹ค :)

 

๊ฒฐ๊ณผ๋ฅผ 224ms -> 40 ms ๋กœ ์ค„์ด๊ณ , ์ฝ”๋“œ๋„ ํ›จ์”ฌ ๊นจ๋—ํ•ด์กŒ์Šต๋‹ˆ๋‹ค !!!


๐Ÿ“Œ ์ฝ”๋“œ

N = int(input())
ball = input()

# ์ด B ์™€ R ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์ค€๋‹ค.
blue = ball.count('B')
red = ball.count('R')

# ๋งจ ์•ž์˜ ์ธ์ ‘ํ•œ ๋ณผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์„œ
# ์ด ๊ฐœ์ˆ˜์—์„œ ๋นผ์ฃผ๊ณ  ์–ด๋–ค ๊ฐ’์ด ๋” ์ž‘์€์ง€ ์ €์žฅํ•ด์ค€๋‹ค.
first = ball[0]
red_minus = ball.find('B') if first == 'R' else 0
blue_minus = ball.find('R') if first == 'B' else 0
first_result = min(blue - blue_minus, red - red_minus)

# ๋งจ ๋’ค์˜ ์ธ์ ‘ํ•œ ๋ณผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์„œ
# ์ด ๊ฐœ์ˆ˜์—์„œ ๋นผ์ฃผ๊ณ  ์–ด๋–ค ๊ฐ’์ด ๋” ์ž‘์€์ง€ ์ €์žฅํ•ด์ค€๋‹ค.
last = ball[-1]
red_minus = len(ball) - ball.rfind('B') - 1 if last == 'R' else 0
blue_minus = len(ball) - ball.rfind('R') - 1 if last == 'B' else 0
last_result = min(blue - blue_minus, red - red_minus)

# ๋งจ ์•ž์˜ ๊ฒฐ๊ณผ๊ฐ’๊ณผ ๋งจ ๋’ค์˜ ๊ฒฐ๊ณผ๊ฐ’ ์ค‘ ๋” ์ ์€ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
print(min(first_result, last_result))