[BOJ][๐ŸŸก5][๋ฐฑ์ค€#01011] Fly me to the Alpha Centauri

์ž‘์„ฑ:    

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

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

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #1011


๋ฌธ์ œ

์šฐํ˜„์ด๋Š” ์–ด๋ฆฐ ์‹œ์ ˆ, ์ง€๊ตฌ ์™ธ์˜ ๋‹ค๋ฅธ ํ–‰์„ฑ์—์„œ๋„ ์ธ๋ฅ˜๋“ค์ด ์‚ด์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ž˜๊ฐ€ ์˜ค๋ฆฌ๋ผ ๋ฏฟ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฐ€ ์ง€๊ตฌ๋ผ๋Š” ์„ธ์ƒ์— ๋ฐœ์„ ๋‚ด๋ ค ๋†“์€ ์ง€ 23๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ, ์„ธ๊ณ„ ์ตœ์—ฐ์†Œ ASNA ์šฐ์ฃผ ๋น„ํ–‰์‚ฌ๊ฐ€ ๋˜์–ด ์ƒˆ๋กœ์šด ์„ธ๊ณ„์— ๋ฐœ์„ ๋‚ด๋ ค ๋†“๋Š” ์˜๊ด‘์˜ ์ˆœ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค. ๊ทธ๊ฐ€ ํƒ‘์Šนํ•˜๊ฒŒ ๋  ์šฐ์ฃผ์„ ์€ Alpha Centauri๋ผ๋Š” ์ƒˆ๋กœ์šด ์ธ๋ฅ˜์˜ ๋ณด๊ธˆ์ž๋ฆฌ๋ฅผ ๊ฐœ์ฒ™ํ•˜๊ธฐ ์œ„ํ•œย ๋Œ€๊ทœ๋ชจ ์ƒํ™œ ์œ ์ง€ ์‹œ์Šคํ…œ์„ ํƒ‘์žฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ ํฌ๊ธฐ์™€ ์งˆ๋Ÿ‰์ด ์—„์ฒญ๋‚œ ์ด์œ ๋กœ ์ตœ์‹ ๊ธฐ์ˆ ๋ ฅ์„ ์ด ๋™์›ํ•˜์—ฌ ๊ฐœ๋ฐœํ•œ ๊ณต๊ฐ„์ด๋™ ์žฅ์น˜๋ฅผ ํƒ‘์žฌํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ณต๊ฐ„์ด๋™ ์žฅ์น˜๋Š” ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๋Š˜๋ฆด ๊ฒฝ์šฐ ๊ธฐ๊ณ„์— ์‹ฌ๊ฐํ•œ ๊ฒฐํ•จ์ด ๋ฐœ์ƒํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์–ด์„œ, ์ด์ „ ์ž‘๋™์‹œ๊ธฐ์— k๊ด‘๋…„์„ ์ด๋™ํ•˜์˜€์„ ๋•Œ๋Š” k-1 , k ํ˜น์€ k+1 ๊ด‘๋…„๋งŒ์„ ๋‹ค์‹œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด ์žฅ์น˜๋ฅผ ์ฒ˜์Œ ์ž‘๋™์‹œํ‚ฌ ๊ฒฝ์šฐ -1 , 0 , 1 ๊ด‘๋…„์„ ์ด๋ก ์ƒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ์‚ฌ์‹ค์ƒ ์Œ์ˆ˜ ํ˜น์€ 0 ๊ฑฐ๋ฆฌ๋งŒํผ์˜ ์ด๋™์€ ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฏ€๋กœ 1 ๊ด‘๋…„์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ๋‹ค์Œ์—๋Š” 0 , 1 , 2 ๊ด‘๋…„์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ( ์—ฌ๊ธฐ์„œ ๋‹ค์‹œ 2๊ด‘๋…„์„ ์ด๋™ํ•œ๋‹ค๋ฉด ๋‹ค์Œ ์‹œ๊ธฐ์—” 1, 2, 3 ๊ด‘๋…„์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. )

image

๊น€์šฐํ˜„์€ ๊ณต๊ฐ„์ด๋™ ์žฅ์น˜ ์ž‘๋™์‹œ์˜ ์—๋„ˆ์ง€ ์†Œ๋ชจ๊ฐ€ ํฌ๋‹ค๋Š” ์ ์„ ์ž˜ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— x์ง€์ ์—์„œย y์ง€์ ์„ ํ–ฅํ•ด ์ตœ์†Œํ•œ์˜ ์ž‘๋™ ํšŸ์ˆ˜๋กœ ์ด๋™ํ•˜๋ ค ํ•œ๋‹ค. ํ•˜์ง€๋งŒ y์ง€์ ์— ๋„์ฐฉํ•ด์„œ๋„ ๊ณต๊ฐ„ ์ด๋™์žฅ์น˜์˜ ์•ˆ์ „์„ฑ์„ ์œ„ํ•˜์—ฌ y์ง€์ ์— ๋„์ฐฉํ•˜๊ธฐ ๋ฐ”๋กœ ์ง์ „์˜ ์ด๋™๊ฑฐ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ 1๊ด‘๋…„์œผ๋กœ ํ•˜๋ ค ํ•œ๋‹ค. ๊น€์šฐํ˜„์„ ์œ„ํ•ด x์ง€์ ๋ถ€ํ„ฐ ์ •ํ™•ํžˆ y์ง€์ ์œผ๋กœ ์ด๋™ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ณต๊ฐ„ ์ด๋™ ์žฅ์น˜ ์ž‘๋™ ํšŸ์ˆ˜์˜ย ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.


์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ํ˜„์žฌ ์œ„์น˜ย x ์™€ ๋ชฉํ‘œ ์œ„์น˜ y ๊ฐ€ ์ •์ˆ˜๋กœ ์ฃผ์–ด์ง€๋ฉฐ, x๋Š” ํ•ญ์ƒ y๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค. (0 โ‰ค x < y < 231)


์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด x์ง€์ ์œผ๋กœ๋ถ€ํ„ฐ y์ง€์ ๊นŒ์ง€ ์ •ํ™•ํžˆ ๋„๋‹ฌํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ย ๊ณต๊ฐ„์ด๋™ ์žฅ์น˜ ์ž‘๋™ ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์ž…๋ ฅ

3
0 3
1 5
45 50


์ถœ๋ ฅ

3
3
4


My Sol

tcs = int(input())
for tc in range(tcs):
    A, B = map(int, input().split())
    d = B-A
    move = 0
    flag = 0
    v = 0

    while d > 0:
        if flag == 0:
            v += 1
            flag += 1

        elif flag == 1:
            flag -= 1

        d -= v
        move += 1

    print(move)

๊ทธ๋ฆผ์„ ์กฐ๊ธˆ์”ฉ ๊ทธ๋ ค๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

image

์กฐ์žกํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์ด๋‹ค. ๋Š˜์–ด๊ฐ€๋Š” ์ด๋™ ๊ฑฐ๋ฆฌ๋Š” ๊ณง ์ด๋™ ์†๋„๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ณ , ์ฆ๊ฐ์˜ ๋‹จ์œ„๋Š” 1์ด๋ฏ€๋กœ 1๋‹จ์œ„์˜ ๋ธ”๋Ÿญ์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋™ ์†๋„๋Š” ์ด๋™ ๊ฑฐ๋ฆฌ์˜ ์ค‘๊ฐ„์ฏค๊นŒ์ง€ ๊ณ„์† ๊ฐ€์†ํ•˜๋‹ค๊ฐ€ ์ค‘๋ฐ˜๋ถ€ํ„ฐ๋Š” ์ค„์–ด๋“ค์–ด์•ผ ๋„์ฐฉํ•  ๋•Œ 1์˜ ์†๋„๋กœ ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, x์ถ•์€ ์ตœ์†Œ ์ด๋™ ํšŸ์ˆ˜์ด๊ณ , y์ถ•์€ ์†๋„์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์Œ“์•„์ง„ ๋ฉด์ ์€? ์‹ค์ œ ์ด๋™ ๊ฑฐ๋ฆฌ์ด๋‹ค. ์ฆ‰, ์ด ์ˆœ์ด๋™๊ฑฐ๋ฆฌ๊ฐ€ 15๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค๋ฉด, 1 2 3 3 3 2 1์˜ ์†๋„๋กœ ์ด๋™ํ•œ ๊ฒƒ์ด๊ณ , ์ด 7๋ฒˆ ์ด๋™ํ•œ ๊ฒƒ์ด๋‹ค. ์ธต์˜ ๋†’์ด ์ฐจ์ด๊ฐ€ 1์ด ๋„˜์œผ๋ฉด ์•ˆ ๋˜๋ฏ€๋กœ, ํ”ผ๋ผ๋ฏธ๋“œ์˜ ์ตœ๊ณ ์ธต์„ ์Œ“์•˜๋‹ค๋ฉด ๋‹ค์‹œ ์ด๋™ํšŸ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ ์ฆ๊ฐ€์‹œ์ผœ ์Œ“์•„๊ฐ€์•ผ ํ•œ๋‹ค๋Š” ๋ง์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ํšŸ์ˆ˜๋งˆ๋‹ค ๋นผ์ฃผ๋ฉด์„œ ํšŸ์ˆ˜๋ฅผ ๊ณ„์† ์นด์šดํŠธํ•ด๊ฐ€๋ฉด ๋˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์†๋„(v)์™€ ์›€์ง์ž„ ํšŸ์ˆ˜(move)์— ๋Œ€ํ•œ ๋ณ€์ˆ˜๋ฅผ ๊ฐ๊ฐ ์ดˆ๊ธฐํ™”ํ•˜์˜€๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ธต์„ 1 1, 2 2, 3 3, ์ด๋ ‡๊ฒŒ ์Œ“์•„๊ฐ€๋ฏ€๋กœ flag ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ์†๋„๋ฅผ ๋†’์ผ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•˜์˜€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์†๋„๋งŒํผ d๋ฅผ ๋นผ์ฃผ๊ณ  ํšŸ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋ฉฐ ํ•ด๋‹น ๋ฐ˜๋ณต์„ ํƒˆ์ถœํ•˜๋ฉด ๋œ๋‹ค.

์†๋„์™€ ์‹œ๊ฐ„ ์ƒ์˜ ๊ทธ๋ž˜ํ”„์˜ ๋ฉด์ ์ด ๊ฑฐ๋ฆฌ๊ฐ€ ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ด์šฉํ•œ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.


๊ฒฐ๊ณผ

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


๋ชจ๋ฒ”๋‹ต์•ˆ

์ถœ์ฒ˜

t = int(input())

for _ in range(t):
    x, y = map(int,input().split())
    distance = y - x
    count = 0  # ์ด๋™ ํšŸ์ˆ˜
    move = 1  # count๋ณ„ ์ด๋™ ๊ฐ€๋Šฅํ•œ ๊ฑฐ๋ฆฌ
    move_plus = 0  # ์ด๋™ํ•œ ๊ฑฐ๋ฆฌ์˜ ํ•ฉ
    while move_plus < distance :
        count += 1
        move_plus += move  # count ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” move๋ฅผ ๋”ํ•จ
        if count % 2 == 0 :  # count๊ฐ€ 2์˜ ๋ฐฐ์ˆ˜์ผ ๋•Œ,
            move += 1
    print(count)

image

์ด๋ ‡๊ฒŒ ํ‘œ์—์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฐ์–ด๋ณด๋ฉด์„œ ์ด๋™ ํšŸ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋Š” ๊ทœ์น™์„ ์ฐพ์•„ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•˜์˜€๋‹ค.

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