λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/Programmers

[Programmers] 숫자의 ν‘œν˜„

 

 

문제 

 

Finn은 μš”μ¦˜ μˆ˜ν•™κ³΅λΆ€μ— λΉ μ Έ μžˆμŠ΅λ‹ˆλ‹€. μˆ˜ν•™ 곡뢀λ₯Ό ν•˜λ˜ Finn은 μžμ—°μˆ˜ n을 μ—°μ†ν•œ μžμ—°μˆ˜λ“€λ‘œ ν‘œν˜„ ν•˜λŠ” 방법이 μ—¬λŸ¬κ°œλΌλŠ” 사싀을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄ 15λŠ” λ‹€μŒκ³Ό 같이 4κ°€μ§€λ‘œ ν‘œν˜„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • 1 + 2 + 3 + 4 + 5 = 15
  • 4 + 5 + 6 = 15
  • 7 + 8 = 15
  • 15 = 15

μžμ—°μˆ˜ n이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ—°μ†λœ μžμ—°μˆ˜λ“€λ‘œ n을 ν‘œν˜„ν•˜λŠ” λ°©λ²•μ˜ 수λ₯Ό returnν•˜λŠ” solutionλ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

 

μ œν•œμ‚¬ν•­
  • n은 10,000 μ΄ν•˜μ˜ μžμ—°μˆ˜ μž…λ‹ˆλ‹€.

 

λ‚˜μ˜ μ½”λ“œ 

 

def solution(n):
    stack = []
    answer = []
    for i in range(1,n+1):
        while sum(stack) != n:
            stack.append(i)
            i += 1
            if sum(stack) > n:
                break
            if sum(stack) == n:
                answer.append(stack)
        stack = []
    return len(answer)
뢄석 > κ°„λ‹¨ν•œ 문제인 κ±° 같은데 자꾸 μ›ν•˜λŠ”λŒ€λ‘œ μ½”λ“œκ°€ μ•ˆμ§œμ Έμ„œ κ³ μƒν•œ λ¬Έμ œλ‹€. 이것저것 μ—¬λŸ¬ 방법을 고민해보닀가 1λΆ€ν„° μ—°μ†ν•œ 수 -> 2λΆ€ν„° μ—°μ†ν•œ 수 -> 3λΆ€ν„° μ—°μ†ν•œ 수 ...  μ΄λŸ°μ‹μœΌλ‘œ μ—°μ†λœ 수λ₯Ό appendν•΄κ°€λ©° κ·Έ 합이 nκ³Ό 동일할 λ•Œλ§Œ answer 배열에 stack을 appendν•˜λŠ” 방법을 μ„ νƒν–ˆλ‹€. 그리고 μ΅œμ’…μ μœΌλ‘œ λ°°μ—΄μ˜ 길이λ₯Ό λ°˜ν™˜ν•˜μ˜€λ‹€. 

 

 

 

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - 숫자의 ν‘œν˜„

Finn은 μš”μ¦˜ μˆ˜ν•™κ³΅λΆ€μ— λΉ μ Έ μžˆμŠ΅λ‹ˆλ‹€. μˆ˜ν•™ 곡뢀λ₯Ό ν•˜λ˜ Finn은 μžμ—°μˆ˜ n을 μ—°μ†ν•œ μžμ—°μˆ˜λ“€λ‘œ ν‘œν˜„ ν•˜λŠ” 방법이 μ—¬λŸ¬κ°œλΌλŠ” 사싀을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄ 15λŠ” λ‹€μŒκ³Ό 같이 4κ°€μ§€λ‘œ ν‘œν˜„ ν• 

programmers.co.kr