๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 12851_์ˆจ๋ฐ”๊ผญ์งˆ 2

๋ฟŒ์•ผ._. 2022. 4. 18. 11:55

Gold V

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/12851)

<์ˆจ๋ฐ”๊ผญ์งˆ 2>

๋ฌธ์ œ 

 

์ˆ˜๋นˆ์ด๋Š” ๋™์ƒ๊ณผ ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ํ˜„์žฌ ์  N(0 ≤ N ≤ 100,000)์— ์žˆ๊ณ , ๋™์ƒ์€ ์  K(0 ≤ K ≤ 100,000)์— ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ๊ฑท๊ฑฐ๋‚˜ ์ˆœ๊ฐ„์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ, ์ˆ˜๋นˆ์ด์˜ ์œ„์น˜๊ฐ€ X์ผ ๋•Œ ๊ฑท๋Š”๋‹ค๋ฉด 1์ดˆ ํ›„์— X-1 ๋˜๋Š” X+1๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์ˆœ๊ฐ„์ด๋™์„ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” 1์ดˆ ํ›„์— 2*X์˜ ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

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

 

 

์ž…๋ ฅ

 

์ฒซ ๋ฒˆ์งธ ์ค„์— ์ˆ˜๋นˆ์ด๊ฐ€ ์žˆ๋Š” ์œ„์น˜ N๊ณผ ๋™์ƒ์ด ์žˆ๋Š” ์œ„์น˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. N๊ณผ K๋Š” ์ •์ˆ˜์ด๋‹ค.

 

์ถœ๋ ฅ 

 

์ฒซ์งธ ์ค„์— ์ˆ˜๋นˆ์ด๊ฐ€ ๋™์ƒ์„ ์ฐพ๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.
๋‘˜์งธ ์ค„์—๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์œผ๋กœ ์ˆ˜๋นˆ์ด๊ฐ€ ๋™์ƒ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

 

 - my solution (Python)

import sys
from collections import deque

if __name__=='__main__':
    x,y=map(int,sys.stdin.readline().split())

    answer=[0]*100001
    queue=deque([x])

    cnt=0
    if x==y: # ํ˜„์žฌ ์œ„์น˜์™€ ๋„์ฐฉํ•  ์œ„์น˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด
        cnt=1
    else:
        while queue:
            temp=queue.popleft()
            dx = [temp-1, temp+1, temp*2] # 1์ดˆ ํ›„ 
            for x in dx:
                if x>=0 and x<=100000 : # ์  ๋ฒ”์œ„
                    if answer[x]==0 or answer[x]>=answer[temp]+1:
                        if x == y and answer[x] == answer[temp] + 1: # ๋ฐฉ๋ฒ•์˜ ์ˆ˜
                            cnt += 1
                        elif x==y and (answer[x]>answer[temp]+1 or answer[x]==0): # ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„
                            cnt=1
                        answer[x]=answer[temp]+1
                        queue.append(x)
    print(answer[y]) # ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„
    print(cnt) # ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์œผ๋กœ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜

 

์ €๋ฒˆ์— ํ•ด๊ฒฐํ–ˆ๋˜ 1697 ์ˆจ๋ฐ”๊ผญ์งˆ ๋ฌธ์ œ์™€ ๋งค์šฐ ๋น„์Šทํ•œ ๋ฌธ์ œ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ์—์„œ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ํ•จ๊ป˜ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ๋ฅผ ๊ณ ์ณ์•ผ ํ–ˆ๋‹ค.

 

  • ํ˜„์žฌ ์œ„์น˜, ๋„์ฐฉํ•ด์•ผ ํ•  ์œ„์น˜ ์ž…๋ ฅ
  • answer = ์‹œ๊ฐ„
  • cnt = ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์œผ๋กœ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜
  • ํ˜„์žฌ ์œ„์น˜์™€ ๋„์ฐฉํ•ด์•ผ ํ•  ์œ„์น˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด -> ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„ = 0, ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์œผ๋กœ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜ =1
  • ํ˜„์žฌ ์œ„์น˜์™€ ๋„์ฐฉํ•ด์•ผ ํ•  ์œ„์น˜๊ฐ€ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด -> queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต -> ์ œ์ผ ์ฒ˜์Œ ๊ฐ’์„ pop -> ์ด๋™ํ•˜๋ ค๋Š” ์œ„์น˜๊ฐ€ ๋ฒ”์œ„ ์•ˆ -> ์•„์ง ๊ทธ ์œ„์น˜๋ฅผ ํ•œ ๋ฒˆ๋„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ( answer [x] =0 ) ๋น ๋ฅธ ์‹œ๊ฐ„์ด๋ผ๋ฉด (answer [x]>=answer [temp]+1) -> ๋„์ฐฉ ์œ„์น˜์ด๋ฉฐ ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์ด๋ฉด cnt +1 but ๋„์ฐฉ ์œ„์น˜์ด๋ฉฐ ๋น ๋ฅธ ์‹œ๊ฐ„ ๊ฐฑ์‹ ์ด๋ฉด cnt =1 / ์•ž์˜ ๋‘ ์กฐ๊ฑด๊ณผ ์ƒ๊ด€์—†์ด answer ๊ฐ’ update ๋ฐ queue์— ์ถ”๊ฐ€
  • ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„ ( answer [y] ), ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์œผ๋กœ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜ ( cnt ) ์ถœ๋ ฅ

 

โ“ ์ฒ˜์Œ์— ์™œ ํ‹€๋ ธ๋Š”๊ฐ€?

๋˜‘๊ฐ™์€ ๊ธธ๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ•˜์˜€๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1 3์ด ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ค๋ฉด 2 2 ๊ฐ€ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•œ๋‹ค. 1 + 1 +1 , (1 * 2) +1๊ณผ ๊ฐ™์ด 2๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ ์ œ์ถœํ•œ ์ฝ”๋“œ๋กœ๋Š” ํ•œ๋ฒˆ ๋ฐฉ๋ฌธํ–ˆ๋˜ ๊ณณ์€ ๋‹ค์‹œ ๊ฐ€์ง€ ๋ชปํ•ด 1์—์„œ 2๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ๋ฅผ ํ•œ ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ๋‚˜์˜ค๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

โ“ ๋‘ ๋ฒˆ์งธ๋Š” ์™œ ํ‹€๋ ธ๋Š”๊ฐ€?

์ž…๋ ฅ๋ฐ›์„ ๋•Œ x์™€ y ๊ฐ’์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ์ง€ ๋ชปํ•˜์˜€๋‹ค. ์ฒ˜์Œ์— ํ‹€๋ ธ์„ ๋•Œ x์™€ y๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ดค์ง€๋งŒ ๋‚ด๊ฐ€ ๊ตฌํ•œ ๊ฐ’์ด ๋งž๋Š” ์ค„ ์•Œ์•˜๋‹ค. ์•„๋ฌด๋ฆฌ ๋‹ค๋ฅธ ์˜ˆ์ œ๋ฅผ ์ž…๋ ฅํ•ด๋„ ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ์ฐพ์•„๋ณด๋‹ˆ x์™€ y ๊ฐ’์ด ๊ฐ™์„ ๋•Œ ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์œผ๋กœ๋Š” 0์ดˆ, ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋กœ๋Š” 1์ด ๋‚˜์™€์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. 0์ดˆ๊ฐ€ ๊ฐ€๋Šฅํ•œ์ง€๋Š” ๋ชฐ๋ž๋‹ค.... ๊ทธ๋ž˜์„œ while๋ฌธ ๋‹ค์Œ์— x์™€ y ๊ฐ’์ด ๊ฐ™์€ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌํ•ด์ฃผ์—ˆ๋”๋‹ˆ ๋˜ ํ‹€๋ ค ์ด ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ ์ค„ ์•Œ์•˜๋‹ค. ํ•˜์ง€๋งŒ ํ•œ์ฐธ ์ฐพ์•„๋ณด๋‹ˆ x์™€ y๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ์˜ ์กฐ๊ฑด๋ฌธ์„ ์ž˜๋ชป๋œ ์œ„์น˜์— ๋„ฃ์–ด์„œ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ์ด์—ˆ๋‹ค.

 


์ƒ๊ฐ๐Ÿค”

 

๊ฒฝ๋กœ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€์ธ ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ˜ผ์ž์„œ ์ž˜ ํ•ด๊ฒฐํ•˜์—ฌ ๋ฟŒ๋“ฏํ•ดํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ...

x์™€ y๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ 0์ดˆ.. 0 ์ดˆ๋ผ๋‹ˆ..