πŸ—οΈ Algorithm/⬛ ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[Programmers] [μ›”κ°„ μ½”λ“œ μ±Œλ¦°μ§€ μ‹œμ¦Œ1] [Python] Level2_이진 λ³€ν™˜ λ°˜λ³΅ν•˜κΈ°

Dbswnstjd 2022. 10. 13. 17:06

문제

https://school.programmers.co.kr/learn/courses/30/lessons/70129

 

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

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

programmers.co.kr

 

풀이

# ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 2단계 - 2018μ›”κ°„ μ½”λ“œ μ±Œλ¦°μ§€1 - 이진 λ³€ν™˜ λ°˜λ³΅ν•˜κΈ°
def solution(s):
    answer = []
    countZero = 0 # 제거된 0의 개수
    countBinary = 0 # 이진 λ³€ν™˜ 횟수
    while True:
        if s == '1': # sκ°€ 1이 λ˜μ—ˆμ„λ•Œ 쀑단
            break
        
        countBinary += 1 # 이진 λ³€ν™˜μ„ ν•˜μ˜€μœΌλ―€λ‘œ +1

        countZero += s.count('0') # μ΄μ§„μˆ˜μ— μžˆλŠ” 0의 개수λ₯Ό μ…ˆ
    
        s = s.replace('0', '') # 0을 μ—†μ• μ£ΌκΈ°

        newLength = len(s) # 이진 λ³€ν™˜λœ 수의 길이 μ €μž₯

        s = bin(newLength)[2:] # 이진 λ³€ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό 톡해 0b~~둜 λ‚˜μ˜€λ―€λ‘œ μ•žμ˜ 2κ°œλŠ” λΉΌκ³  μŠ¬λΌμ΄μ‹± 

    return [countBinary, countZero] # μ΄μ§„λ³€ν™˜νšŸμˆ˜, μ—†μ•€ 0의 개수

쑰건 

1. λ¬Έμžμ—΄μ— μžˆλŠ” λͺ¨λ“  0 제거

2. 제거 ν›„ λ¬Έμžμ—΄μ˜ 길이λ₯Ό μ΄μ§„λ²•μœΌλ‘œ ν‘œν˜„

3. λ¬Έμžμ—΄μ΄ 1이 되면 쀑단

 

λ‚˜μ˜ 풀이

1. λ¬΄ν•œλ£¨ν”„λ₯Ό λŒλ©΄μ„œ λ¬Έμžμ—΄μ΄ 1이 λ˜μ—ˆμ„ λ•Œ μ€‘λ‹¨μ‹œν‚€λ„λ‘ ν•œλ‹€. 

2. λ°˜λ³΅λ¬Έμ— λ“€μ–΄μ˜€λ©΄ 이진 λ³€ν™˜μ„ ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ 이진 λ³€ν™˜ 횟수 + 1

3. λ¬Έμžμ—΄μ— μžˆλŠ” 0의 개수λ₯Ό μ„Όλ‹€ ( 0을 μ—†μ•€ 개수λ₯Ό μ„Έμ•Ό ν•˜κΈ° λ•Œλ¬Έ)

4. 0을 μ—†μ• μ€€λ‹€.

5. λ³€ν™˜λœ 수의 길이 μ €μž₯

6. bin ν•¨μˆ˜λ₯Ό 톡해 μ΄μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ”λ° 0b~~둜 λ‚˜μ˜€λ―€λ‘œ 2번째 μΈλ±μŠ€λΆ€ν„° μŠ¬λΌμ΄μ‹±

반볡