λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/Programmers

[Programmers] λ‹€μŒ 큰 숫자

 

 

문제

 

μžμ—°μˆ˜ 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 μ΄ν•˜μ˜ μžμ—°μˆ˜ μž…λ‹ˆλ‹€.

 

 

λ‚˜μ˜ μ½”λ“œ 

 

 

def solution(n):
    p = str(bin(n))
    while p.count('1') != str(bin(n+1)).count('1'):
        n += 1
    return n+1

 

 

뢄석 > 10μ§„μˆ˜λ₯Ό 2μ§„μˆ˜λ‘œ λ°”κΎΈλŠ” 법을 쑰금 ν—€λ§Έλ˜ κ²ƒλ§Œ λΉΌλ©΄ μˆ˜μ›”ν•˜κ²Œ ν’€μ—ˆλ˜ λ¬Έμ œμ˜€λ‹€. 처음 주어진 10μ§„μˆ˜λ₯Ό 2μ§„μˆ˜λ‘œ λ°”κΎΌ 수의 1의 κ°œμˆ˜μ™€ κ·Έ λ‹€μŒ 수λ₯Ό μ΄μ§„μˆ˜λ‘œ λ°”κΎΌ μˆ˜μ—μ„œ 1의 κ°œμˆ˜κ°€ 같지 μ•Šμ„ λ•ŒκΉŒμ§€ n을 1μ”© μ¦κ°€μ‹œν‚€λ©΄μ„œ while문을 λŒλ¦¬λ‹€κ°€κ°€ 두 수의 1의 κ°œμˆ˜κ°€ κ°™μ•„μ§ˆ λ•Œκ°€ n보닀 큰 μžμ—°μˆ˜μ΄λ©΄μ„œ μ΄μ§„μˆ˜λ‘œ 바꿨을 λ•Œ 1의 μˆ˜κ°€ 같은 κ°€μž₯ μž‘μ€ μžμ—°μˆ˜κ°€ λœλ‹€. n은 1을 λ”ν•œ μƒνƒœμ—μ„œ μ¦κ°€μ‹œμΌ°κΈ° λ•Œλ¬Έμ—, λ§ˆμ§€λ§‰ λ°˜ν™˜ μ‹œ 1을 더해 λ°˜ν™˜ν•˜λ©΄ λœλ‹€. 

 

 

# 파이썬 진법 λ³€ν™˜
# 1. λ‹€λ₯Έ μ§„μˆ˜λ₯Ό 10μ§„μˆ˜λ‘œ λ³€ν™˜μ‹œν‚¬ λ•Œ - base에 λ³€ν™˜μ‹œν‚¬ 진법을 λ„£μ–΄μ£Όλ©΄ λœλ‹€. 
print(int('101',2))
print(int('202',3))
print(int('303',4))

# 2. 10μ§„μˆ˜λ₯Ό 2,8,16 μ§„μˆ˜λ‘œ λ³€ν™˜μ‹œν‚¬ λ•Œ (μ°¨λ‘€λ‘œ)
print(bin(11))
print(oct(11))
print(hex(11))

 

 

 

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - λ‹€μŒ 큰 숫자

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

programmers.co.kr