[BOJ][๐ŸŸก3][๋ฐฑ์ค€#18235] ์ง€๊ธˆ ๋งŒ๋‚˜๋Ÿฌ ๊ฐ‘๋‹ˆ๋‹ค

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #18235


๋ฌธ์ œ

์—ฌํ–‰์„ ๋งˆ์น˜๊ณ  ๊ฝ‰๊ฝ‰๋‚˜๋ผ๋กœ ๋Œ์•„๊ฐ€๋˜ ์ค‘ ์˜ค๋ฆฌ์™€ ์œก๋ฆฌ๋Š” ์„œ๋กœ๋ฅผ ์žƒ์–ด๋ฒ„๋ ธ๋‹ค. ํ˜„์žฌ ์˜ค๋ฆฌ๋Š” ์  A์— ์žˆ๊ณ , ์œก๋ฆฌ๋Š” ์  B์— ์žˆ๋‹ค. ์˜ค๋ฆฌ์™€ ์œก๋ฆฌ๋Š” ์„œ๋กœ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ฌด์กฐ๊ฑด ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ์”ฉย ์ ํ”„๋ฅผ ํ•œ๋‹ค.ย 1์ผ์ฐจ์—๋Š” 1๋งŒํผย ์ ํ”„ํ•˜๊ณ  ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚  ๋•Œ๋งˆ๋‹ค ์„œ๋กœ๊ฐ€ ๋”์šฑ ๋ณด๊ณ  ์‹ถ์€ ๋‚˜๋จธ์ง€ ๋‘ ๋ฐฐ์”ฉ ๋” ๋ฉ€๋ฆฌ ์ ํ”„ํ•œ๋‹ค. ์ฆ‰, ํ˜„์žฌ ์œ„์น˜๊ฐ€ X์ด๊ณ  ์„œ๋กœ๋ฅผ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•œ ์ง€ y์ผ์ฐจ๋ผ๋ฉดย ์  X + 2y-1ย ๋˜๋Š”ย ์  X -ย 2y-1๋กœ ์ ํ”„ํ•œ๋‹ค. 0 ์ดํ•˜์˜ ์ ๋“ค๊ณผ N+1ย ์ด์ƒ์˜ ์ ๋“ค์€ ๋””๋”œย ๋•…์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—ย ๊ทธ๊ณณ์œผ๋กœ ์ ํ”„ํ•œ๋‹ค๋ฉด ์˜ค๋ฆฌ์™€ ์œก๋ฆฌ๋Š” ์˜์›ํžˆ ๋งŒ๋‚˜์ง€ย ๋ชปํ•œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ Nย = 10, Aย = 4, Bย = 10์ผ ๋•Œ์˜ ์˜ˆ์‹œ์ด๋‹ค. ํ™”์‚ดํ‘œ๋Š” ์ ํ”„ ๊ฐ€๋Šฅํ•œ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์˜ค๋ฆฌ์™€ ์œก๋ฆฌ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋‘˜์ด ๋งŒ๋‚  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ์ผ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ณด์ž. ๊ฐ™์€ ๋‚ ย ๊ฐ™์€ ์ ์˜ ๋•…์— ๋„์ฐฉํ–ˆ์„ย ๋•Œย ์˜ค๋ฆฌ์™€ ์œก๋ฆฌ๊ฐ€ ๋งŒ๋‚œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.


์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ์„ธ ์ •์ˆ˜ N, A, B๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.ย (2 โ‰ค N โ‰คย 500,000, 1 โ‰คย A, B โ‰ค N, A โ‰  B)


์ถœ๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ์˜ค๋ฆฌ์™€ ์œก๋ฆฌ๊ฐ€ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ์ผ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์˜ค๋ฆฌ์™€ ์œก๋ฆฌ๊ฐ€ ์˜์›ํžˆย ๋งŒ๋‚  ์ˆ˜ ์—†๋‹ค๋ฉดย -1์„ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

10 4 10


์ถœ๋ ฅ

2


์˜ˆ์ œ 2

์ž…๋ ฅ

2 1 2


์ถœ๋ ฅ

-1


์˜ˆ์ œ 3

์ž…๋ ฅ

7 2 6


์ถœ๋ ฅ

2


My Sol

def move(C):
    global n, day
    jump = 2**day
    new_C = set()
    for c in C:
        for op in (1, -1):
            if 0 < c+op*jump <= n:
                new_C.add(c+op*jump)
    return new_C

n, a, b = map(int, input().split())
A, B = {a}, {b}
day = 0
while True:
    if not (A and B):
        day = -1
        break

    A, B = move(A), move(B)
    day += 1
    if A & B: break

print(day)

set์˜ ํ•ด์‹œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ต‰์žฅํžˆ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค. ์‹œ์ž‘์ ์œผ๋กœ๋ถ€ํ„ฐ 1์ผ์ฐจ์—๋Š” 1๋งŒํผ, 2์ผ์ฐจ์—๋Š” 2๋งŒํผโ€ฆ n์ผ์ฐจ์—๋Š” 2**(n-1)๋งŒํผ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ์ดํ•ดํ•œ๋‹ค.

  1. ์ž…๋ ฅ๋œ ์ดˆ๊ธฐ ์œ„์น˜๋ฅผ A, B set์— ๊ฐ๊ฐ ๋„ฃ์–ด์ค€๋‹ค.
  2. ํ•ด๋‹น ์œ„์น˜๋ถ€ํ„ฐ 2**(n-1) step์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ set์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
  3. set์˜ ๊ต์ง‘ํ•ฉ์„ ํ™œ์šฉํ•ด ์–ด๋– ํ•œ ๋‚ ์— A, B set์ด ์ผ์น˜ํ•˜๋Š” ํฌ์ธํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ฆ‰ ์–ด๋– ํ•œ ๋‚ ์— ๊ฐ™์€ ํฌ์ธํŠธ์— ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด while๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  4. ๋งŒ์•ฝ ๋‚ ์งœ๊ฐ€ ๋งŽ์ด ์ง€๋‚˜ ์ด๋™ ๊ฑฐ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง€๊ฒŒ ๋˜๋ฉด ํŠน์ •ํ•œ ๋‚ ์— A, B ์ค‘ ํ•œ ํฌ์ธํŠธ๋„ ๋ฒ”์œ„ ๋‚ด์—์„œ ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๋ฐ˜๋ณต์„ ์ข…๋ฃŒํ•˜๊ณ  -1์„ ์ถœ๋ ฅํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ