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

[๋ฐฑ์ค€ 2138 ๐Ÿฅ‡] ์ „๊ตฌ์™€ ์Šค์œ„์น˜

1eehyunji 2023. 8. 1. 23:13

๋ฌธ์ œ

N๊ฐœ์˜ ์Šค์œ„์น˜์™€ N๊ฐœ์˜ ์ „๊ตฌ๊ฐ€ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ „๊ตฌ๋Š” ์ผœ์ ธ ์žˆ๋Š” ์ƒํƒœ์™€ ๊บผ์ ธ ์žˆ๋Š” ์ƒํƒœ ์ค‘ ํ•˜๋‚˜์˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค. i(1 < i < N)๋ฒˆ ์Šค์œ„์น˜๋ฅผ ๋ˆ„๋ฅด๋ฉด i-1, i, i+1์˜ ์„ธ ๊ฐœ์˜ ์ „๊ตฌ์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€๋‹ค. ์ฆ‰, ๊บผ์ ธ ์žˆ๋Š” ์ „๊ตฌ๋Š” ์ผœ์ง€๊ณ , ์ผœ์ ธ ์žˆ๋Š” ์ „๊ตฌ๋Š” ๊บผ์ง€๊ฒŒ ๋œ๋‹ค. 1๋ฒˆ ์Šค์œ„์น˜๋ฅผ ๋ˆŒ๋ €์„ ๊ฒฝ์šฐ์—๋Š” 1, 2๋ฒˆ ์ „๊ตฌ์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๊ณ , N๋ฒˆ ์Šค์œ„์น˜๋ฅผ ๋ˆŒ๋ €์„ ๊ฒฝ์šฐ์—๋Š” N-1, N๋ฒˆ ์ „๊ตฌ์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€๋‹ค.

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

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N(2 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” ์ „๊ตฌ๋“ค์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž N๊ฐœ๊ฐ€ ๊ณต๋ฐฑ ์—†์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„์—๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ์ „๊ตฌ๋“ค์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž N๊ฐœ๊ฐ€ ๊ณต๋ฐฑ ์—†์ด ์ฃผ์–ด์ง„๋‹ค. 0์€ ์ผœ์ ธ ์žˆ๋Š” ์ƒํƒœ, 1์€ ๊บผ์ ธ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฌธ์ œ ํ’€์ด

import sys

n=int(sys.stdin.readline())
start=list(map(int, sys.stdin.readline().strip()))
goal=list(map(int, sys.stdin.readline().strip()))

ans=[]
# 0๋ฒˆ ์Šค์œ„์น˜๋ฅผ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ
pushzero=1
pushzero_start=start.copy()
pushzero_start[0]=1-pushzero_start[0]
pushzero_start[1]=1-pushzero_start[1]
for i in range(1,n):
    if pushzero_start[i-1]!=goal[i-1]:
        pushzero+=1
        # i๋ฒˆ ์Šค์œ„์น˜ ๋ˆŒ๋Ÿฌ์•ผ ํ•จ
        for t in (i-1, i, i+1):
            if 0<=t<n:
                pushzero_start[t]=1-pushzero_start[t]
if pushzero_start==goal:
    ans.append(pushzero)

# 0๋ฒˆ ์Šค์œ„์น˜ ์•ˆ๋ˆ„๋ฅธ ๊ฒฝ์šฐ
notpushzero=0
for i in range(1,n):
    if start[i-1]!=goal[i-1]:
        notpushzero+=1
        for t in (i-1,i,i+1):
            if 0<=t<n:
                start[t]=1-start[t]
if start==goal:
    ans.append(notpushzero)

if ans:
    print(min(ans))
else:
    print(-1)

์ด ๋ฌธ์ œ๋Š” ํ’€์ด๊ฐ€ ๋– ์˜ค๋ฅด์ง€ ์•Š์•„์„œ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค...!

https://staticvoidlife.tistory.com/143

 

[๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ „๊ตฌ์™€ ์Šค์œ„์น˜

์˜ˆ์ œ ์ž…๋ ฅ 1 3 000 010 ์˜ˆ์ œ ์ถœ๋ ฅ 1 3 https://www.acmicpc.net/problem/2138 2138๋ฒˆ: ์ „๊ตฌ์™€ ์Šค์œ„์น˜ N๊ฐœ์˜ ์Šค์œ„์น˜์™€ N๊ฐœ์˜ ์ „๊ตฌ๊ฐ€ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ „๊ตฌ๋Š” ์ผœ์ ธ ์žˆ๋Š”(1) ์ƒํƒœ์™€ ๊บผ์ ธ ์žˆ๋Š” (0) ์ƒํƒœ ์ค‘ ํ•˜๋‚˜์˜ ์ƒํƒœ๋ฅผ ๊ฐ€

staticvoidlife.tistory.com

์œ„ ๋ธ”๋กœ๊ทธ์˜ ํ’€์ด๋Œ€๋กœ ์ดํ•ดํ•˜๋ฉฐ ํ’€์—ˆ๋‹ค. ์ด๋Ÿฐ ์ƒ๊ฐ์€ ์–ด๋А์ •๋„ ๊ฒฝ์ง€์— ์˜ฌ๋ผ์•ผ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ๋Š”์ง€ ์‹ ๊ธฐํ–ˆ๋‹ค. ๋ถ„๋ฐœํ•˜์ž!

์ถ”๊ฐ€์ ์œผ๋กœ 

1. ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋Š” ์ˆœ์„œ๋Š” ์ƒ๊ด€์ด ์—†๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 000์„ ์˜ˆ๋กœ ๋“ค๋ฉด 1๋ฒˆ์„ ๋ˆ„๋ฅด๊ณ  2๋ฒˆ์„ ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ 000 -> 111 -> 100์ด๊ณ ,

2๋ฒˆ์„ ๋ˆ„๋ฅด๊ณ  1๋ฒˆ์„ ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ 000 -> 011 -> 100์œผ๋กœ ๊ฒฐ๊ณผ์ ์œผ๋กœ 100 ๋™์ผํ•œ ๊ฐ’์ด ๋œ๋‹ค.

 

2. ์ตœ์†Œํ•œ ๋ˆŒ๋Ÿฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฐ ์Šค์œ„์น˜๋ฅผ ์ตœ๋Œ€ 1๋ฒˆ๊นŒ์ง€ ๋ˆŒ๋Ÿฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ ์ด์œ ๋Š” 2๋ฒˆ ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ ์•„์˜ˆ ๋ˆ„๋ฅด์ง€ ์•Š๋Š” ์ƒํƒœ์™€ ๋™์ผํ•˜๊ณ , 3๋ฒˆ ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ 1๋ฒˆ ๋ˆ„๋ฅด๋Š” ์ƒํƒœ์™€ ๋™์ผํ•˜๊ณ , 4๋ฒˆ์„ ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ ๋‹ค์‹œ ์•„์˜ˆ ๋ˆ„๋ฅด์ง€ ์•Š๋Š” ์ƒํƒœ์™€ ๋™์ผํ•ด์ง„๋‹ค. ์ด๋ ‡๊ฒŒ ๋ˆ„๋ฅด๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜๋ณต๋˜๊ธฐ ๋•Œ๋ฌธ์— 0๋ฒˆ ๋˜๋Š” 1๋ฒˆ ๋ˆŒ๋Ÿฌ์•ผ ๋ฒ„ํŠผ์„ ์ตœ์†Œํ™”ํ•ด์„œ ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ๋‹ค.