반응형
숫자의 표현
문제 설명
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
문제의 예시와 같습니다.
문제 코드
def solution(n):
answer = 0
if n == 1:
answer = 1
else:
if n % 2 == 0: # 짝수일 때
div = n // 2
dp = [i for i in range(1, div + 1)]
elif n % 2 == 1: # 홀수일 때
div = n // 2 + 1
dp = [i for i in range(1, div + 1)]
for i in range(1, div):
dp[i] = dp[i] + dp[i - 1]
if n in dp:
answer += 1
for i in range(len(dp) - 1):
for j in range(i + 1, len(dp)):
if dp[j] - dp[i] == n:
answer += 1
if dp[j] - dp[i] > n: # 시간초과 해결 코드
break
answer += 1
return answer
문제해석
먼저 시간복잡도를 해결하기 위해 제공된 숫자를 반으로 나누는 작업을 진행하였습니다. 왜냐하면 제공된 숫자에서 2로 나눴을 때보다 큰수를 연속적으로 더하면 제공된 숫자보다 클수 밖에 없기때문에 2를 나누는 작업을 진행했습니다. 이후에 1부터 n//2 까지의 sum 연산을 하는 숫자 리스트를 만든 후에 1 인덱스부터 시작하는 리스트의 값을 빼며 숫자 counting을 하였습니다. 이때 시간 효율성을 위해 연속적인 숫자를 더할 때 이미 n보다 큰 경우에는 break문을 통해 효율성을 생각하였습니다.
'Algorithm > programmers' 카테고리의 다른 글
프로그래머스 [level3] 등굣길 - python3 (0) | 2023.08.15 |
---|---|
프로그래머스 [level3] 단어 변환 - python3 (0) | 2023.08.10 |
프로그래머스 [level2] JadenCase 문자열 만들기 - python3 (0) | 2023.08.02 |
프로그래머스 [level2] 캐시 - python3 (0) | 2023.07.31 |
프로그래머스 [level2] 숫자 변환하기- python3 (0) | 2023.07.18 |