Algorithm

[Python] ๋ฐฑ์ค€ 2292 - ๋ฒŒ์ง‘

๐ŸฅญMango 2020. 11. 16. 17:08

๋ฌธ์ œ

 

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์œก๊ฐํ˜•์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฒŒ์ง‘์ด ์žˆ๋‹ค. ๊ทธ๋ฆผ์—์„œ ๋ณด๋Š” ๋ฐ”์™€ ๊ฐ™์ด ์ค‘์•™์˜ ๋ฐฉ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ด์›ƒํ•˜๋Š” ๋ฐฉ์— ๋Œ์•„๊ฐ€๋ฉด์„œ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฒˆํ˜ธ๋ฅผ ์ฃผ์†Œ๋กœ ๋งค๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์ˆซ์ž N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ฒŒ์ง‘์˜ ์ค‘์•™ 1์—์„œ N๋ฒˆ ๋ฐฉ๊นŒ์ง€ ์ตœ์†Œ ๊ฐœ์ˆ˜์˜ ๋ฐฉ์„ ์ง€๋‚˜์„œ ๊ฐˆ ๋•Œ ๋ช‡ ๊ฐœ์˜ ๋ฐฉ์„ ์ง€๋‚˜๊ฐ€๋Š”์ง€(์‹œ์ž‘๊ณผ ๋์„ ํฌํ•จํ•˜์—ฌ)๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, 13๊นŒ์ง€๋Š” 3๊ฐœ, 58๊นŒ์ง€๋Š” 5๊ฐœ๋ฅผ ์ง€๋‚œ๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N(1 ≤ N ≤ 1,000,000,000)์ด ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋ฐฉ๊นŒ์ง€ ์ตœ์†Œ ๊ฐœ์ˆ˜์˜ ๋ฐฉ์„ ์ง€๋‚˜์„œ ๊ฐˆ ๋•Œ ๋ช‡ ๊ฐœ์˜ ๋ฐฉ์„ ์ง€๋‚˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.


์ •๋‹ต

n = int(input())
res = 1
room = 1

while True:
    if n == 1:
        print('1')
        break
    if res >= n and (res - (6 * room)) + 1 <= n:
        print(room)
        break
    else:
        res += 6 * room
        room += 1

์œ„ ๋ฒŒ์ง‘ ๊ทธ๋ฆผ์— ๋”ฐ๋ฅด๋ฉด

 

1            ->  1๋ฒˆ๋ฐฉ /1

2 ~ 7      -> 2๋ฒˆ๋ฐฉ /6

8 ~ 19    -> 3๋ฒˆ๋ฐฉ /12

20 ~ 37 -> 4๋ฒˆ๋ฐฉ /18

38 ~ 61  -> 5๋ฒˆ๋ฐฉ / 24

 

์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐฉ์„ ๊ฑฐ์ณ์•ผํ•˜๋Š” ๋ฒˆํ˜ธ๋“ค์ด 6์˜๋ฐฐ์ˆ˜๋กœ ์ฆ๊ฐ€ํ•˜๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

๋งŒ์•ฝ n=1์ด๋ผ๋ฉด 1์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

 

๋งŒ์•ฝ n์ด 1์ด ์•„๋‹ ๊ฒฝ์šฐ์—๋Š” res๊ฐ€ n๋ณด๋‹ค ์ž‘๊ณ , (res - 6*room) + 1์ด ์„ฑ๋ฆฝ ๋  ๊ฒฝ์šฐ์— room(๋ฐฉ ๋ฒˆํ˜ธ)๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

์„ฑ๋ฆฝ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด res์— 6*room์„ ๋”ํ•ด์ฃผ๊ณ , room์„ 1 ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค.

์—ฌ๊ธฐ์„œ res๋Š” 7, 19, 37, 61์ฒ˜๋Ÿผ ๋ฐฉ์˜ ๋งˆ์ง€๋ง‰ ์ˆซ์ž์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด n = 21์ผ ๊ฒฝ์šฐ, 

n์€ 37๋ณด๋‹ค ์ž‘๊ณ , (37 - 6*3) +1 ๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์— 4๊ฐ€ ์ถœ๋ ฅ์ด ๋œ๋‹ค.