데린이 고인물되기

[TIL] 250911 - 프로그래머스 숫자의 표현 본문

Algorithm/문제

[TIL] 250911 - 프로그래머스 숫자의 표현

데린이 성장 중 2025. 9. 11. 20:48
반응형

문제

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 이하의 자연수 입니다.

 

입출력 예
n result
15 4
입출력 예 설명

입출력 예#1
문제의 예시와 같습니다.

 


나의 답

# 짝수개로 나눠질 수 있으려면 -> 1 2 3 4 5 6 -> 21 에서 1,6/2,5/3,4 쌍으로 합이 7이니까 7*3 = 21. 즉, 짝수로 k개로 수가 나뉠 수 있으려면 k/2 만큼의 나머지가 남아야함. 그리고 각 쌍 더한게 k이상이어야함.
# 홀수개로 이 수가 나눠질 수 있으려면 -> 1 + 2 + 3 + 4 + 5  = 15에서 중간에 있는 값 3 기준으로 양 옆 2,4/ 1,5의 합이 3의 2배임. 즉, 합해서 나오는 수는 중간에 있는 값 a 기준으로 a(1+ 홀수개//2). 걍 n이 그 홀수갯수(k)로 나눠떨어지면 되는거임. 그리고 나누어 떨어진 와중에 k개로 나누어 떨어졌다면 n/k*2 가 k 보다 커야함. 
def solution(n):
    answer = 0
    # n//2 까지 탐색
    for k in range(1, n//2+2):
        if k % 2 == 0 : # 항의 수가 짝수
            value = n/k # 값
            remain = n%k # 나머지
            if remain == k/2 and value*2 >= k:
                answer += 1
        else: # 항의 수가 홀수
            if n % k == 0 and n/k*2 > k: # 나누어 떨어지면
                answer += 1
    return answer

 

반응형