🧩 Algorithm/[Programmers] Level 2

Programmers λ‹€μŒ 큰 숫자 (Python/Level 2)

devCloud 2022. 8. 13. 16:49
728x90
 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ λ§€μΉ­. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 λ§€μΉ­ λ°›μœΌμ„Έμš”.

programmers.co.kr

문제

μžμ—°μˆ˜ n이 μ£Όμ–΄μ‘Œμ„ λ•Œ, n의 λ‹€μŒ 큰 μˆ«μžλŠ” λ‹€μŒκ³Ό 같이 μ •μ˜ ν•©λ‹ˆλ‹€.

  • 쑰건 1. n의 λ‹€μŒ 큰 μˆ«μžλŠ” n보닀 큰 μžμ—°μˆ˜ μž…λ‹ˆλ‹€.
  • 쑰건 2. n의 λ‹€μŒ 큰 μˆ«μžμ™€ n은 2μ§„μˆ˜λ‘œ λ³€ν™˜ν–ˆμ„ λ•Œ 1의 κ°―μˆ˜κ°€ κ°™μŠ΅λ‹ˆλ‹€.
  • 쑰건 3. n의 λ‹€μŒ 큰 μˆ«μžλŠ” 쑰건 1, 2λ₯Ό λ§Œμ‘±ν•˜λŠ” 수 쀑 κ°€μž₯ μž‘μ€ 수 μž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄μ„œ 78(1001110)의 λ‹€μŒ 큰 μˆ«μžλŠ” 83(1010011)μž…λ‹ˆλ‹€. μžμ—°μˆ˜ n이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, n의 λ‹€μŒ 큰 숫자λ₯Ό return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

μ œν•œμ‚¬ν•­

  • n은 1,000,000 μ΄ν•˜μ˜ μžμ—°μˆ˜ μž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

n result
78 83
15 23

문제 μ„€λͺ…

  • μž…μΆœλ ₯ 예#1 문제 μ˜ˆμ‹œμ™€ κ°™μŠ΅λ‹ˆλ‹€.
  • μž…μΆœλ ₯ 예#2 15(1111)의 λ‹€μŒ 큰 μˆ«μžλŠ” 23(10111)μž…λ‹ˆλ‹€.

 

풀이

1. n을 2μ§„μˆ˜λ‘œ λ³€ν™˜ν•œ ν›„, 1의 개수만 μ„Όλ‹€.

  • bin(μ •μˆ˜) : μ •μˆ˜λ₯Ό 2μ§„μˆ˜λ‘œ λ³€ν™˜ν•œλ‹€. λ³€ν™˜ν•˜λ©΄ 0bλΌλŠ” 접두어가 λΆ™λŠ”λ‹€.
  • count(문자) : 문자의 개수λ₯Ό μΉ΄μš΄νŠΈν•œλ‹€. μ •μˆ˜λŠ” λ“€μ–΄μ˜¬ 수 μ—†λ‹€.

2. 2μ§„μˆ˜ n의 1의 κ°œμˆ˜μ™€ κ°™μ•„μ§ˆ λ•ŒκΉŒμ§€ 1μ”© λ”ν•˜λ©΄μ„œ λ°˜λ³΅ν•œλ‹€.

 

Solution

def solution(n):
    answer = list(bin(n)).count('1')
    a = n
    num = 0
    while answer != num:
        a += 1
        num = list(bin(a)).count('1')
    return a

Another Solution

def solution(n):
    num1 = bin(n).count('1')
    while True:
        n = n + 1
        if num1 == bin(n).count('1'):
            break
    return n

β€» listλ₯Ό μ“°μ§€ μ•Šκ³  ν•  경우 νš¨μœ¨μ„±μ΄ 더 μ’‹λ‹€.

728x90