Programmers
Meet the best programming lessons in videos and practices. Programmers provide programing lessons, algorithm problems, programming competitions, and blockchain materials.
프로그래머스 문제풀이
문제
코딩테스트 연습 – 숫자의 표현
Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.
문제설명
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
문제의 예시와 같습니다.
문제해결과정
- n이라는 수를 만들 수 있는 연속된 자연수들의 집합 수를 구하면 된다.
- 예시에서 보이듯이 시작 자연수가 기준으로 연속된 수들을 더해서 n이 되는 경우를 카운트하면 된다.
위 같은 문제 및 제한사항을 해석하고 문제풀이를 시작하면 됩니다.
나의 풀이
def solution(n): answer = 0 for i in range(1,n+1): # 시작 자연수는 1~n까지이므로 range(1,n+1) ttl_sum=0 # 자연수들의 합산 결과를 담을 변수 for i2 in range(i,n+1): # 시작 자연수부터 n까지 합산하기 위해 range(i, n+1) ttl_sum += i2 # 수를 더한다 if ttl_sum==n: # 합산변수가 n과 같으면 카운트하고 반복문 종료 answer += 1 break if ttl_sum > n: # 합산변수가 n을 초과하면 반복문 종료 break return answer
다른 사람의 풀이
수학공식을 이용한 풀이를 가져와봤습니다.
저는 등차수열의 합으로 구한것이라는데 뭔지 기억이 안나네요. 배웠던 것은 같은데…ㄷㄷ
문제 자체는 어렵지않았는데 이 해답은 이해하기가 어렵네요. 수학부터 다시 공부해야겠어요…
def expressions(num): return len([i for i in range(1,num+1,2) if num % i is 0])