π Problem
https://www.acmicpc.net/problem/3460
π Solution
μκ³ λ¦¬μ¦ λ¬Έμ νμ΄μμ κ°μΈμ μΌλ‘ κ°μ₯ μ€μνκ² μκ°νλ κ²μ λ€μν λ°©λ²μΌλ‘ μ κ·Όνλ κ²μ΄λ€. ν λ¬Έμ λ₯Ό νλλΌλ, 1κ°μ§ λ°©μμΌλ‘ νμ΄νλ€κ³ λλλ κ²μ΄ μλλΌ μ¬λ¬ λ²μ μλμ κ³ λ―Όμ ν΅ν΄ μ±μ₯ν μ μλ€. πͺ
1οΈβ£ case 1
κ°μ₯ λ¨Όμ νμ΄ν λ°©λ²μΌλ‘ νμ΄μ¬μ λ΄μ₯ν¨μ binμ νμ©νμλ€. bin ν¨μλ₯Ό μ¬μ©νλ©΄ μμ '0b'λΌλ λ¬Έμκ° ν¬ν¨λ string νμμΌλ‘ 리ν΄λκΈ°λλ¬Έμ index slicingμΌλ‘ μ«μλ§ μ§€λΌμ£Όμλ€. βοΈ python documentationμ μ°Έκ³ νμ¬ λ€μν λ°©λ²μΌλ‘ νμ΄ν΄λ³΄μ!
# case 1 : λ©λͺ¨λ¦¬ 30840KB / μκ° 64ms
T = int(input())
# λ΄μ₯ν¨μμΈ bin()μ νμ©νμ¬ μ΄μ§μλ‘ λ°κΎΈλ λ°©λ² νμ©
for _ in range(T):
# μμ κ±°κΎΈλ‘
bnum = list(reversed(bin(int(input()))[2:])) # 0b μ κ±° / string type
# print(bnum)
for i in range(len(bnum)):
if bnum[i] == '1':
print(i, end = ' ')
2οΈβ£ case 2
case1κ³Ό λΉμ·ν λ°©λ²μ΄μ§λ§, μ΄μ§μμ μμλ₯Ό κ±°κΎΈλ‘ λ³κ²½νμ§μκ³ , index λ²νΈλ₯Ό κ±°κΎΈλ‘ μ£Όμ΄ νμ΄ν λ°©λ²μ΄λ€. μκ°μ case1μ΄ μμ£Ό μ‘°κΈ λ λΉ λ₯΄λ€. μΈλ±μ€ λ²νΈλ₯Ό -λ₯Ό λΆμ¬ κ±°κΎΈλ‘ νννλ λ°©λ²μ μμ£Ό μ°μ΄λ κΈ°μ΅νμ! π‘
# case 2 : λ©λͺ¨λ¦¬ 30840KB / μκ° 68ms
T = int(input())
# λ΄μ₯ν¨μμΈ bin()μ νμ©νμ¬ μ΄μ§μλ‘ λ°κΎΈλ λ°©λ² νμ©
for _ in range(T):
bnum = bin(int(input()))[2:] # 0b μ κ±° / string type
for i in range(len(bnum)):
# μμ κ±°κΎΈλ‘
if bnum[-i -1] == '1':
print(i, end = ' ')
3οΈβ£ case 3
documentationμ μΈκΈλ κ²μ²λΌ bin ν¨μλ '0b'κ° λΆμ΄μ μΆλ ₯νκΈ°λλ¬Έμ formatμ΄λ f-stringμ νμ©νμ¬ λ€λ₯Έ λ°©λ²μΌλ‘ νμ΄ν μ μλ€.
# case 3 : λ©λͺ¨λ¦¬ 29284KB / μκ° 52ms
T = int(input())
for _ in range(T):
# f-string νμ©νμ¬ 2μ§μλ‘ λ°κΏμ£Όκ³ μμ κ±°κΎΈλ‘
bnum = f'{int(input()):2b}'[::-1]
# bnum = format(int(input()), 'b') # κ°μ νν
# print(bnum)
G = (b for b in range(len(bnum)) if bnum[b] == '1') # list comprehension
print(*G) #unpacking
4οΈβ£ case 4
λ§μ§λ§μΌλ‘ μ΄μ§μλ‘ λ°κΎΈλ κ³Όμ μ μ½λλ‘ κ΅¬ννμ¬ λλ¨Έμ§λ₯Ό λ°λ‘ νμΈνκ³ μΆλ ₯νλ λ°©λ²μ΄ μλ€. μλ referenceμ μλ λΈλ‘κ·Έλ₯Ό μ°Έκ³ νμλ€.
# case 4 : λ©λͺ¨λ¦¬ 30840KB / μκ° 72ms
# μ΄μ§μλ‘ λ°κΎΈλ©΄μ λλ¨Έμ§λ‘ λ°λ‘ νμΈνκ³ μΆλ ₯
T = int(input())
for _ in range(T):
n = int(input())
i = 0
while n > 0:
if n % 2 == 1: # λλ¨Έμ§κ° 1μ΄λ©΄ μΆλ ₯
print(i, end=' ')
n = n // 2 # λͺ«
i += 1
π cf. μ΄μ§μλ‘ λ§λλ ν¨μ μ§μ ꡬν
μ΄μ§μλ 2λ‘ λμ΄μ λλμ΄μ§μ§ μμ λκΉμ§ λλκ³ , λλ¨Έμ§λ€μ λͺ¨μμ ꡬν μ μλ€. ν΄λΉ λ°©λ²μ μ½λλ‘ κ΅¬ννμλ€.
λν λ¬Έμ κ° index λ²νΈλ₯Ό μΆλ ₯νλ κ²μ΄κΈ°λλ¬Έμ enumerate ν¨μλ₯Ό νμ©ν μ λ μλ€.
# cf) μ΄μ§μλ‘ λ§λλ ν¨μ μ§μ ꡬν
def getBinaryNum(num, result = []):
a = num // 2
b = num % 2
result.append(b)
if a == 0: return result[::-1]
else: return getBinaryNum(a, result)
T = int(input())
for _ in range(T):
bnum = getBinaryNum(int(input()))[::-1] # κ±°κΎΈλ‘
# print(bnum)
# enumerate νμ©νμ¬ index λ²νΈ νλ¦°νΈνκΈ° & Unpacking
print(*(i for i, x in enumerate(bnum) if int(x))) # if int(x) = if 1 = if True
π Reference
- νμ΄ μ°Έκ³ λΈλ‘κ·Έ : https://jinho-study.tistory.com/487
- python bin documentation : https://docs.python.org/3/library/functions.html#bin