DevYoon

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] λ§ˆλ²•μ˜ μ—˜λ¦¬λ² μ΄ν„° (Python) λ³Έλ¬Έ

PS/Programmers

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] λ§ˆλ²•μ˜ μ—˜λ¦¬λ² μ΄ν„° (Python)

gimewn 2023. 2. 3. 18:53

 link πŸ”— https://school.programmers.co.kr/learn/courses/30/lessons/148653

 

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

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

programmers.co.kr

 

문제 μ„€λͺ…

λ§ˆλ²•μ˜ 세계에 μ‚¬λŠ” λ―Όμˆ˜λŠ” μ•„μ£Ό 높은 탑에 μ‚΄κ³  μžˆμŠ΅λ‹ˆλ‹€. 탑이 λ„ˆλ¬΄ λ†’μ•„μ„œ κ±Έμ–΄ λ‹€λ‹ˆκΈ° νž˜λ“  λ―Όμˆ˜λŠ” λ§ˆλ²•μ˜ μ—˜λ¦¬λ² μ΄ν„°λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. λ§ˆλ²•μ˜ μ—˜λ¦¬λ² μ΄ν„°μ˜ λ²„νŠΌμ€ νŠΉλ³„ν•©λ‹ˆλ‹€. λ§ˆλ²•μ˜ μ—˜λ¦¬λ² μ΄ν„°μ—λŠ” -1, +1, -10, +10, -100, +100 λ“±κ³Ό 같이 μ ˆλŒ“κ°’μ΄ 10c (c ≥ 0 인 μ •μˆ˜) ν˜•νƒœμΈ μ •μˆ˜λ“€μ΄ 적힌 λ²„νŠΌμ΄ μžˆμŠ΅λ‹ˆλ‹€. λ§ˆλ²•μ˜ μ—˜λ¦¬λ² μ΄ν„°μ˜ λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ ν˜„μž¬ μΈ΅ μˆ˜μ— λ²„νŠΌμ— μ ν˜€ μžˆλŠ” 값을 λ”ν•œ 측으둜 μ΄λ™ν•˜κ²Œ λ©λ‹ˆλ‹€. 단, μ—˜λ¦¬λ² μ΄ν„°κ°€ μœ„μΉ˜ν•΄ μžˆλŠ” μΈ΅κ³Ό λ²„νŠΌμ˜ 값을 λ”ν•œ κ²°κ³Όκ°€ 0보닀 μž‘μœΌλ©΄ μ—˜λ¦¬λ² μ΄ν„°λŠ” 움직이지 μ•ŠμŠ΅λ‹ˆλ‹€. 민수의 μ„Έκ³„μ—μ„œλŠ” 0측이 κ°€μž₯ μ•„λž˜μΈ΅μ΄λ©° μ—˜λ¦¬λ² μ΄ν„°λŠ” ν˜„μž¬ λ―Όμˆ˜κ°€ μžˆλŠ” 측에 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆλ²•μ˜ μ—˜λ¦¬λ² μ΄ν„°λ₯Ό 움직이기 μœ„ν•΄μ„œ λ²„νŠΌ ν•œ λ²ˆλ‹Ή λ§ˆλ²•μ˜ 돌 ν•œ 개λ₯Ό μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€.예λ₯Ό λ“€μ–΄, 16측에 μžˆλŠ” λ―Όμˆ˜κ°€ 0측으둜 κ°€λ €λ©΄ -1이 적힌 λ²„νŠΌμ„ 6번, -10이 적힌 λ²„νŠΌμ„ 1번 눌러 λ§ˆλ²•μ˜ 돌 7개λ₯Ό μ†Œλͺ¨ν•˜μ—¬ 0측으둜 갈 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ, +1이 적힌 λ²„νŠΌμ„ 4번, -10이 적힌 λ²„νŠΌ 2λ²ˆμ„ λˆ„λ₯΄λ©΄ λ§ˆλ²•μ˜ 돌 6개λ₯Ό μ†Œλͺ¨ν•˜μ—¬ 0측으둜 갈 수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆλ²•μ˜ λŒμ„ 아끼기 μœ„ν•΄ λ―Όμˆ˜λŠ” 항상 μ΅œμ†Œν•œμ˜ λ²„νŠΌμ„ λˆŒλŸ¬μ„œ μ΄λ™ν•˜λ €κ³  ν•©λ‹ˆλ‹€. λ―Όμˆ˜κ°€ μ–΄λ–€ μΈ΅μ—μ„œ μ—˜λ¦¬λ² μ΄ν„°λ₯Ό 타고 0측으둜 λ‚΄λ €κ°€λŠ”λ° ν•„μš”ν•œ λ§ˆλ²•μ˜ 돌의 μ΅œμ†Œ 개수λ₯Ό μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€. λ―Όμˆ˜μ™€ λ§ˆλ²•μ˜ μ—˜λ¦¬λ² μ΄ν„°κ°€ μžˆλŠ” 측을 λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ storey κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 0측으둜 κ°€κΈ° μœ„ν•΄ ν•„μš”ν•œ λ§ˆλ²•μ˜ 돌의 μ΅œμ†Œκ°’μ„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜μ„Έμš”.

 

μ œν•œμ‚¬ν•­

  • 1 ≤ storey ≤ 100,000,000

 


 

def solution(storey):
    answer = 0
    
    while storey:
        now = storey % 10
        storey //= 10
        
        # 맨 끝 μˆ˜κ°€ 5보닀 μž‘μœΌλ©΄ - λ²„νŠΌ λˆ„λ₯΄κΈ°
        if now < 5:
            answer += now
        # 맨 끝 μˆ˜κ°€ 5와 κ°™μœΌλ©΄
        elif now == 5:
            next = storey % 10
            # λ‹€μŒ μˆ˜κ°€ 5 이상일 경우 -> + λ²„νŠΌ λˆ„λ₯΄κ³ , κ·Έ λ‹€μŒ 끝 μˆ˜μ— +1
            # λ‹€μŒ μˆ˜κ°€ 5 미만일 경우 -> - λ²„νŠΌ λˆ„λ₯΄κΈ°
            if next >= 5:
                storey += 1
            answer += 5
        # 맨 끝 μˆ˜κ°€ 5보닀 크면 + λ²„νŠΌ λˆ„λ₯΄κ³ , κ·Έ λ‹€μŒ 끝 μˆ˜μ— +1
        else:
            answer += 10 - now
            storey += 1
    
    return answer

 

πŸ”₯ 맨 끝자리 μˆ«μžκ°€ 5보닀 μž‘μ„ λ•Œ, 5일 λ•Œ, 5보닀 클 λ•Œλ‘œ λ‚˜λˆ μ„œ 생각해야 ν•œλ‹€.

πŸ”₯ 5일 λ•Œ, κ·Έ μ•žμžλ¦¬ μˆ«μžκ°€ 5 이상인지와 μ•„λ‹Œμ§€λ₯Ό 또 λ‚˜λˆ μ„œ 생각해야 ν•œλ‹€.

πŸ”₯ μ²˜μŒμ—λŠ” 끝자리 μˆ«μžκ°€ 5일 λ•Œ μ•žμžλ¦¬ μˆ«μžκ°€ 4 이상이면 + λ²„νŠΌμ„ λˆ„λ₯΄λŠ” κ²ƒμœΌλ‘œ μƒκ°ν–ˆλŠ”λ°, μΌ€μ΄μŠ€ 5번과 8번이 μ˜€λ‹΅μœΌλ‘œ λ‚˜μ™”λ‹€. μ§ˆλ¬Έν•˜κΈ° κ²Œμ‹œνŒμ—μ„œ μ–΄λ–€ 뢄이 μ˜¬λ €μ£Όμ‹  ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 545λ₯Ό 풀어보고 생각을 잘λͺ»ν–ˆλ‹€λŠ” κ±Έ κΉ¨λ‹¬μ•˜λ‹€.