์•Œ๊ณ ๋ฆฌ์ฆ˜/Greedy

[๋ฐฑ์ค€ 20310 ๐Ÿฅˆ] ํƒ€๋…ธ์Šค

1eehyunji 2023. 10. 16. 21:13

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

 

20310๋ฒˆ: ํƒ€๋…ธ์Šค

์–ด๋А ๋‚ , ํƒ€๋…ธ์Šค๋Š” 0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด $S$๋ฅผ ๋ณด์•˜๋‹ค. ์‹ ๊ธฐํ•˜๊ฒŒ๋„, $S$๊ฐ€ ํฌํ•จํ•˜๋Š” 0์˜ ๊ฐœ์ˆ˜์™€ $S$๊ฐ€ ํฌํ•จํ•˜๋Š” 1์˜ ๊ฐœ์ˆ˜๋Š” ๋ชจ๋‘ ์ง์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. ๊ฐ‘์ž๊ธฐ ์‹ฌ์ˆ ์ด ๋‚œ ํƒ€๋…ธ์Šค๋Š” $S$๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌธ์ž

www.acmicpc.net

๋ฌธ์ œ ํ’€์ด

import sys

numbers=list(sys.stdin.readline().strip())
zero, one = numbers.count('0')//2, numbers.count('1')//2

# 0์€ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ง€์›Œ์ง ํ‘œ์‹œ
for idx in range(len(numbers)-1,-1,-1):
    if zero<=0:
        break
    if numbers[idx]=='0':
        numbers[idx]=-1
        zero-=1
# 1์€ ์•ž์—์„œ๋ถ€ํ„ฐ ์ง€์›Œ์ง ํ‘œ์‹œ
for idx in range(len(numbers)):
    if one<=0:
        break
    if numbers[idx]=='1':
        numbers[idx]=-1
        one-=1

for idx in range(len(numbers)):
    if numbers[idx]!=-1:
        print(numbers[idx], end='')
  • ๊ฐ„๋‹จํ•œ ๋ฌธ์ž์—ด ๋ฌธ์ œ์˜€์ง€๋งŒ, ๊ธฐ์กด ๋ฐฐ์—ด์˜ ๋ฐฐ์น˜๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค๋Š” ์กฐ๊ฑด์„ ๊ฐ„๊ณผํ•ด์„œ ์ฒ˜์Œ์—” 25์ ์„ ๋งก์•˜๋‹ค!
  • ์ฒ˜์Œ์—” 0๊ณผ 1์˜ ๊ฐœ์ˆ˜๋ฅผ countํ•ด์„œ 2๋กœ ๋‚˜๋ˆ ์„œ ์ €์žฅํ•˜๊ณ , ์‚ฌ์ „์ˆœ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ์šฐ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ์— '0'*(0์˜ ๊ฐœ์ˆ˜)+'1'*(1์˜ ๊ฐœ์ˆ˜)๋ฅผ ์ถœ๋ ฅํ–ˆ์—ˆ๋‹ค. (๋ฌธ์ œ๋ฅผ ๋˜‘๋ฐ”๋กœ ์ฝ๊ณ  ์ดํ•ดํ•˜์žใ… ใ… )
  • ๊ธฐ์กด ๋ฐฐ์—ด์˜ ๋ฐฐ์น˜๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š์œผ๋ฉด์„œ ์‚ฌ์ „์ˆœ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด '0'์€ ์ง€์›Œ์•ผ ํ•˜๋Š” 0์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ง€์›Œ์ฃผ๊ณ , '1'์€ 1์˜ ๊ฐœ์ˆ˜๋งŒํผ ์•ž์—์„œ๋ถ€ํ„ฐ ์ง€์›Œ์ฃผ๋ฉด 0์ด ์•ž์ชฝ์— ์ตœ๋Œ€ํ•œ ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๊ณ , 1์ด ์ตœ๋Œ€ํ•œ ๋’ค์ชฝ์— ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ „์ˆœ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฌธ์ž์—ด์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 
  • ์—ฌ๊ธฐ์„œ ๋ฌธ์ž์—ด์„ ์ง€์šด๋‹ค๊ณ  ๋‹จ์ˆœํžˆ pop(์ง€์›Œ์•ผ ํ•˜๋Š” ์ธ๋ฑ์Šค)๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด popํ•ด์„œ ์ง€์›Œ์ง€๋Š” ๋ฐฐ์—ด์— ๋”ฐ๋ผ ์ด๋ฏธ ํƒ์ƒ‰ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋˜ ์ง€์šฐ๊ฑฐ๋‚˜, ์ง€์šฐ๋ฉด ์•ˆ๋˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ง€์šธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— numbers ๋ฐฐ์—ด์— ์‚ญ์ œ๋˜์—ˆ๋‹ค๋Š” ์ฒ˜๋ฆฌ๋ฅผ -1๋กœ ํ‘œ์‹œํ–ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ์—ฐ์‚ฐ์„ ๋๋‚ธ ํ›„์— numbers ๊ฐ’์ด -1์ด ์•„๋‹Œ ์š”์†Œ๋“ค์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.