숫자의 표현
답:
def solution(n):
count = 1
for number in range(1, n // 2 + 2):
result = 0
for num in range(number, n):
result += num
if result == n:
count += 1
break
elif result > n:
break
return count
문제 분석 및 해석
자연수 n이 주어질 때, 연속하는 수를 더해 n이 나오는 가짓수 구하기
ex) n = 15
- 1 + 2 + 3 + 4 + 5 = 15
- 4 + 5 + 6 = 15
- 7 + 8 = 15
- 15 = 15
>> 풀이생각
일단 자기 자신 count + 1
1 ~ n-1까지.. 1로 시작해 2~ 차례로 더하도록 하기 : for문?
1부터 배열? 혹은 range 에서 차례로 더하여 : while
더한 수가 == n 혹은 % n == 0를 완전히 충족하는경우 count + 1
예제를 보니 보아하니 1 ~ n-1 까지 안해도 되고 n // 2 + 1 까지만 해보면 될듯
range니까 +1
풀이
count = 1로 자연수 n 자기자신을 미리 포함해 시작
첫 for문은 시작해야하는 숫자를 나타내는 number
첫 for문에 두번째 for문에서 초기화된 0으로 값을 시작해야하는 result를 선언
두번째 for문의 range에 number, n을 넣어 해당 숫자를 result에 순서대로 +하여 저장할 수 있도록 하기
for number in range(1, n // 2 + 2):
result = 0
for num in range(number, n):
result += num
result가 n이랑 동일한 경우 count +1 해주고 for문 탈출
result가 더하다가 n보다 커지면 for문 탈출
리뷰.
이중 for 문 혹은 for while을 이용해야겠다는 생각이 들었다.
result가 초기화 되는 부분과 range의 범위는 잘 잡았는데,
이후 식을 쓰는데 시간이 필요했다.
어제 문제가 생각을 가볍게 해야했다면 오늘 문제는 좀더 깊이 생각해봐야하는 문제였다.
등차수열 합 공식을 활용할 수도 있다고 한다.
# 문제 개편 전 풀이이므로 올바른 답이 나오지 않을 가능성이 있음 주의**
def expressions(num):
return len([i for i in range(1,num+1,2) if num % i is 0])
예를 들어 n이 3개의 연속된 자연수(i-1, i, i+1)의 합으로 표현된다면 합은 3i가 됩니다. 즉, n은 3의 배수입니다. 마찬가지로 5개의 연속된 자연수의 합으로 n이 표현이 된다면 n은 5의 배수여야합니다. 따라서, n의 약수 중 홀수가 몇개있냐는 문제와 같은 문제로 해석할 수 있습니다.
'알고리즘 풀이' 카테고리의 다른 글
[알고리즘] 프로그래머스 | 신고 결과 받기 (0) | 2023.08.26 |
---|---|
[알고리즘] 프로그래머스 | JadenCase 문자열 만들기 (0) | 2023.08.25 |
[알고리즘] 프로그래머스 | 체육복 lv.1 (0) | 2023.08.23 |
[알고리즘] 프로그래머스 | 로또의 최고 순위와 최저 순위 (0) | 2023.08.22 |
[알고리즘] 프로그래머스 | 피보나치 수열 (0) | 2023.08.19 |