πŸ’« ETC/Problem Solving

[BOJ] 3460. μ΄μ§„μˆ˜

ming412 2023. 9. 22. 01:25
 

3460번: μ΄μ§„μˆ˜

μ–‘μ˜ μ •μˆ˜ n이 μ£Όμ–΄μ‘Œμ„ λ•Œ, 이λ₯Ό μ΄μ§„μˆ˜λ‘œ λ‚˜νƒ€λƒˆμ„ λ•Œ 1의 μœ„μΉ˜λ₯Ό λͺ¨λ‘ μ°ΎλŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. μ΅œν•˜μœ„ λΉ„νŠΈ(least significant bit, lsb)의 μœ„μΉ˜λŠ” 0이닀.

www.acmicpc.net

 

✍️ 문제 μš”μ•½

μ–‘μ˜ μ •μˆ˜ n이 μ£Όμ–΄μ‘Œμ„ λ•Œ, 이λ₯Ό μ΄μ§„μˆ˜λ‘œ λ‚˜νƒ€λƒˆμ„ λ•Œ 1의 μœ„μΉ˜(인덱슀)λ₯Ό λͺ¨λ‘ 좜λ ₯ν•˜λΌ.

 

πŸ’ͺ λ¬΄μ‹ν•˜κ²Œ ν’€κΈ°

문제λ₯Ό 읽자마자 μƒκ°λ‚˜λŠ”λŒ€λ‘œ 흐름을 정리해 λ³΄μ•˜λ‹€.

1. n을 2둜 λ‚˜λˆˆ λͺ«μ„ λ¬Έμžμ—΄μ— λˆ„μ ν•œλ‹€.

2. n을 λ‚˜λ¨Έμ§€λ‘œ κ°±μ‹ ν•˜λ©° λ§ˆμ§€λ§‰μ— n을 λˆ„μ ν•œλ‹€. 

3. λ§Œλ“€μ–΄μ§„ λ¬Έμžμ—΄μ„ μˆœν™˜ν•˜λ©° 1인 μš”μ†Œμ˜ 인덱슀λ₯Ό 좜λ ₯ν•œλ‹€.

def getBinary(n):
    res = ''
    while n >= 2:
        res += str(n%2) # 맨 뒀에 λˆ„μ  (κ²°κ³ΌλŠ” 거꾸둜)
        n //= 2
    res += str(n)
    return res 

TC = int(input())

for _ in range(TC):
    N = int(input())
    for i, x in enumerate(getBinary(N)):
        if x == '1':
            print(i, end=' ')

μ‹œκ°„ λ³΅μž‘λ„λŠ” 

 

🎯 μ΅œμ ν™”

TC = int(input())

for _ in range(TC):
    binary = bin(int(input()))[2:] # 0b μ œμ™Έ
    for i, x in enumerate(binary[::-1]): # 거꾸둜
        if x == '1':
            print(i, end=' ')

μ‹œκ°„ λ³΅μž‘λ„λŠ”

 

πŸ€” λ‹€λ₯Έ μ‚¬λžŒμ˜ μ½”λ“œλ₯Ό 탐ꡬ해보기

2μ§„μˆ˜μ˜ 값을 μ—­μˆœμ„ 봐야 ν•˜κΈ° λ•Œλ¬Έμ— [-i-1]λ₯Ό μ‚¬μš©ν•˜μ—¬ μ—­μˆœμœΌλ‘œ ν•œ λ¬Έμžμ—΄μ”© 보기 μ‹œμž‘ν•œλ‹€.

TC = int(input())

for _ in range(TC):
    binary = bin(int(input()))[2:]
    for i in range(len(binary)):
        if binary[-i-1] == '1': 
        	print(i, end=' ')

 

πŸ“š μ°Έκ³  자료

https://seungyong20.tistory.com/7