Algorithm Problem/Python

[python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - μ•½μˆ˜μ˜ κ°œμˆ˜μ™€ λ§μ…ˆ

deo2kim 2021. 6. 21. 17:56
λ°˜μ‘ν˜•

πŸ€”λ¬Έμ œ ν•΄κ²°

1. λ‚˜μ˜ 풀이

    μ•½μˆ˜μ˜ κ°œμˆ˜λ₯Ό κ΅¬ν•˜λŠ” λ°©λ²•:

    μ†ŒμΈμˆ˜ λΆ„ν•΄λ₯Ό ν•˜κ³ , κ·Έ κ±°λ“­μ œκ³±μ— +1을 ν•˜λ©΄ μ•½μˆ˜κ°€ λ‚˜μ˜¨λ‹€.

    κ±°λ“­μ œκ³±μ΄ 2개 μ΄μƒμ΄λΌλ©΄, κ°κ°μ˜ κ±°λ“­μ œκ³±μ— +1을 ν•˜κ³  κ·Έ μˆ«μžλ“€μ„ μ„œλ‘œ κ³±ν•΄μ€€λ‹€.

2. λ‹€λ₯Έ 쒋은 풀이

    λͺ¨λ“  μˆ«μžλŠ” μ•½μˆ˜μ˜ κ°œμˆ˜κ°€ μ§μˆ˜κ°œμ΄λ‹€.

    μ˜ˆμ™Έλ‘œ μ œκ³±μˆ˜λŠ” μ•½μˆ˜μ˜ κ°œμˆ˜κ°€ ν™€μˆ˜μ΄λ‹€. μ œκ³±μ΄κΈ° λ•Œλ¬Έ...

 

πŸ’¨ λ””ν΄νŠΈλ”•νŠΈμ™€ λ¦¬λ“€μŠ€κΉŒμ§€ μ¨κ°€λ©΄μ„œ μ—΄μ‹¬νžˆ ν’€μ—ˆμ§€λ§Œ, μˆ˜ν•™μ„ μž˜ν•˜λ©΄ μ €λ ‡κ²Œ μ‰½κ²Œ ν’€ 수 μžˆλ‹€....😜

 

πŸ’»μ†ŒμŠ€ μ½”λ“œ

from collections import defaultdict
from functools import reduce

def solution(left, right):
    """
    μ•½μˆ˜μ˜ 개수λ₯Ό κ΅¬ν•˜λŠ” 방법:
    μ†ŒμΈμˆ˜ λΆ„ν•΄λ₯Ό ν•˜κ³ , κ·Έ κ±°λ“­μ œκ³±μ— +1을 ν•˜λ©΄ μ•½μˆ˜κ°€ λ‚˜μ˜¨λ‹€.
    κ±°λ“­μ œκ³±μ΄ 2개 이상이라면, 각각의 κ±°λ“­μ œκ³±μ— +1을 ν•˜κ³  κ·Έ μˆ«μžλ“€μ„ μ„œλ‘œ κ³±ν•΄μ€€λ‹€.
    """
    """
    λͺ¨λ“  μˆ«μžλŠ” μ•½μˆ˜μ˜ κ°œμˆ˜κ°€ μ§μˆ˜κ°œμ΄λ‹€.
    μ˜ˆμ™Έλ‘œ μ œκ³±μˆ˜λŠ” μ•½μˆ˜μ˜ κ°œμˆ˜κ°€ ν™€μˆ˜μ΄λ‹€. 제곱이기 λ•Œλ¬Έ...
    """
    answer = 0

    plus_minus = []
    for i in range(left, right + 1):            
        power_dict = defaultdict(int)
        if i == 1:
            power_dict[1] = 0

        num = i
        div = 2
        while div <= i:
            if num % div == 0:
                power_dict[div] += 1
                num //= div
            else:
                div += 1
        
        result = list(map(lambda x: x+1,power_dict.values()))
        plus_minus.append(multiply(result))

    for operator in plus_minus:
        if operator % 2 == 0:
            answer += left
        else:
            answer -= left
        left += 1

    return answer

def multiply(arr):
    return reduce(lambda x, y: x * y, arr) 

 

πŸ“•λ¬Έμ œ 확인

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

링크: https://programmers.co.kr/learn/courses/30/lessons/77884?language=python3

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ•½μˆ˜μ˜ κ°œμˆ˜μ™€ λ§μ…ˆ

두 μ •μˆ˜ left와 rightκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. leftλΆ€ν„° rightκΉŒμ§€μ˜ λͺ¨λ“  μˆ˜λ“€ μ€‘μ—μ„œ, μ•½μˆ˜μ˜ κ°œμˆ˜κ°€ 짝수인 μˆ˜λŠ” λ”ν•˜κ³ , μ•½μˆ˜μ˜ κ°œμˆ˜κ°€ ν™€μˆ˜μΈ μˆ˜λŠ” λΊ€ 수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Ό

programmers.co.kr

 

λ°˜μ‘ν˜•