๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] 2๊ฐœ ์ดํ•˜๋กœ ๋‹ค๋ฅธ ๋น„ํŠธ (level2, python)

๊ฐœ๋ฐœ์ž HOON 2022. 9. 19. 22:47

๋ฌธ์ œ ์„ค๋ช…

์–‘์˜ ์ •์ˆ˜ x์— ๋Œ€ํ•œ ํ•จ์ˆ˜ f(x)๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • x๋ณด๋‹ค ํฌ๊ณ  x์™€ ๋น„ํŠธ๊ฐ€ 1~2๊ฐœ ๋‹ค๋ฅธ ์ˆ˜๋“ค ์ค‘์—์„œ ์ œ์ผ ์ž‘์€ ์ˆ˜

 

์˜ˆ๋ฅผ ๋“ค์–ด,

  • f(2) = 3 ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ํ‘œ์™€ ๊ฐ™์ด 2๋ณด๋‹ค ํฐ ์ˆ˜๋“ค ์ค‘์—์„œ ๋น„ํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ง€์ ์ด 2๊ฐœ ์ดํ•˜์ด๋ฉด์„œ ์ œ์ผ ์ž‘์€ ์ˆ˜๊ฐ€ 3์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • f(7) = 11 ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ํ‘œ์™€ ๊ฐ™์ด 7๋ณด๋‹ค ํฐ ์ˆ˜๋“ค ์ค‘์—์„œ ๋น„ํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ง€์ ์ด 2๊ฐœ ์ดํ•˜์ด๋ฉด์„œ ์ œ์ผ ์ž‘์€ ์ˆ˜๊ฐ€ 11์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

์ •์ˆ˜๋“ค์ด ๋‹ด๊ธด ๋ฐฐ์—ด numbers๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. numbers์˜ ๋ชจ๋“  ์ˆ˜๋“ค์— ๋Œ€ํ•˜์—ฌ ๊ฐ ์ˆ˜์˜ f ๊ฐ’์„ ๋ฐฐ์—ด์— ์ฐจ๋ก€๋Œ€๋กœ ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ
  • 1 ≤ numbers์˜ ๊ธธ์ด ≤ 100,000
  • 0 ≤ numbers์˜ ๋ชจ๋“  ์ˆ˜ ≤ 1015

์ž…์ถœ๋ ฅ ์˜ˆ

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

 

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • ๋ฌธ์ œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ’€์ด ์ฝ”๋“œ

def solution(numbers):
    answer = []
    for num in numbers:
        temp = bin(num)[2:]
        if temp[-1] == '0':
            answer.append(num+1)
        else:
            idx = 0
            for i in range(len(temp)-1, -1, -1):
                if temp[i] != '1':
                    idx = i
                    break
            if idx == 0:
                temp = '10' + temp[1:]
                answer.append(int(temp, 2))
            else:
                temp = temp[:idx] + '10' + temp[idx+2:]
                answer.append(int(temp, 2))
                
    return answer

์šฐ์„ , ๋ธŒ๋ฃจํŠธํฌ์Šค ๋ฐฉ์‹์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

์ฃผ์–ด์ง€๋Š” ์ˆซ์ž๋Š” 100,000๊ฐœ์ด๋ฉฐ, ํ˜„์žฌ ์ˆซ์ž๋กœ๋ถ€ํ„ฐ 1์”ฉ ์˜ฌ๋ ค๊ฐ€๋ฉฐ ์กฐ๊ฑด์— ๋งž๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ์—๋Š”

numbers์— ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋Š” 10์˜ 15์Šน๊นŒ์ง€์ด๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๋ฉด์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ๋ฒ—์–ด๋‚  ์ˆ˜ ์—†๋‹ค.

 

์ด๋Ÿด๋•Œ๋Š” ํŒจํ„ด์„ ์ฐพ์•„๋‚ด์•ผ ํ•œ๋‹ค. ์„ธ ๊ฐ€์ง€ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.

1) 1011 - 1100 - 1101

2) 10111 - 11000 - 11001 - 11010 - 11011

3) (0)11 - 100 - 101

 

์ฒซ ๋ฒˆ์งธ์™€ ๋‘ ๋ฒˆ์งธ๋Š” 0์ด ์˜ค๋ฅธ์ชฝ ๋ ์ž๋ฆฌ๊ฐ€ ์•„๋‹Œ, ์ค‘๊ฐ„์— ์œ„์น˜ํ•œ ๊ฒฝ์šฐ์ด๋‹ค.

์กฐ๊ฑด์— ๋งž๋Š” ์ˆ˜๋ฅผ ์ฐพ์•„๋ณด๋ฉด, ์ฒซ ๋ฒˆ์งธ๋Š” 1011 - 1101, ๋‘ ๋ฒˆ์งธ๋Š” 10111 - 11011์ด๋‹ค.

์ž˜ ๋ณด๋ฉด, 0์ด ํ•œ ์นธ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

์„ธ ๋ฒˆ์งธ์˜ ๊ฒฝ์šฐ, ์ฃผ์–ด์ง„ ์ˆซ์ž๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ ๋ชจ๋‘ 1๋กœ ์ฐจ ์žˆ๋Š” ๊ฒฝ์šฐ๋‹ค.

์ด ๊ฒฝ์šฐ๋„, ์•ž์— 0๋น„ํŠธ๋ฅผ ๋„ฃ๊ณ , 0์„ ํ•œ ์นธ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ค๋ฉด ๋œ๋‹ค.

 

์˜ˆ์‹œ์— ๋‚˜์˜ค์ง€ ์•Š์•˜์ง€๋งŒ, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๋น„ํŠธ๊ฐ€ 0์ด๋ผ๋ฉด ๊ทธ๋ƒฅ 1์„ ๋”ํ•˜๋ฉด ๋œ๋‹ค.

์ด ๋…ผ๋ฆฌ์— ๋งž๊ฒŒ ์ฝ”๋”ฉ์„ ํ•˜๋ฉด ๋œ๋‹ค.

 

python์˜ bin ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์‰ฝ๊ฒŒ 10์ง„์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฆฌํ„ด ๊ฐ’์€ ๋ฌธ์ž์—ด๋กœ, '0bxxxxx' ๊ผด๋กœ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์—, ์•ž์˜ 0b๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ์Šฌ๋ผ์ด์‹ฑ์œผ๋กœ [2:] ๋ถ€ํ„ฐ ์‚ฌ์šฉํ•œ๋‹ค.

 

์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ์™ผ์ชฝ์œผ๋กœ ๋น„ํŠธ๋ฅผ ํ™•์ธํ•˜๋ฉฐ, '1'์ด ์•„๋‹Œ ๋น„ํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

'1'์ด ์•„๋‹Œ ๋น„ํŠธ, ์ฆ‰ '0'์ธ ๋น„ํŠธ๊ฐ€ ์กด์žฌํ•˜๋ฉด '0'๋น„ํŠธ ์™ผ์ชฝ์€ ๋ชจ๋‘ ์‚ด๋ฆฌ๊ณ , '10'์œผ๋กœ 0๊ณผ 1์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๊ณ , ๋‘ ์นธ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์„ ์‚ด๋ฆฐ๋‹ค.

 

'0'์ธ ๋น„ํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด, ๊ฐ€์žฅ ์•ž์ด '10'์œผ๋กœ ๋ฐ”๋€Œ๊ณ , ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ์‚ด๋ฆฐ๋‹ค.

์ตœ์ข… answer์— ๋„ฃ์„ ๋•Œ๋Š”, 2์ง„์ˆ˜๋ฅผ 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— int ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

int์˜ parameter์ค‘์—๋Š”, ์ง„์ˆ˜๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. int(๋ฌธ์ž์—ด, ๋ฌธ์ž์—ด์ด ํ‘œํ˜„ํ•˜๊ณ  ์žˆ๋Š” ์ง„์ˆ˜)๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด N์ง„์ˆ˜๋ฅผ 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.