알고리즘
[프로그래머스] 숫자의 표현
여러가지이야기
2020. 7. 15. 01:27
- 나는 합을 구하라고 하면.. 리스트에 어펜드해서 sum 하는 것이 일단 떠오른다.
- 그런데 어펜드는 효율성 면에서 매우 좋지 않다.
- 대안은 리스트에 원소를 넣어서 더해주려고 하지말고, 숫자를 바로 더해주면 된다
#append 쓸 경우
def solution(n):
answer = 0
start_num = 1
while start_num <= n:
numlist = []
for i in range(start_num, n+1):
numlist.append(i)
# print(numlist)
if sum(numlist) == n:
answer += 1
# print(answer, sum(numlist))
break
elif sum(numlist) > n:
break
start_num += 1
return answer
- 더 나은 풀이
#append 안쓰고 바로 더해주기
def solution(n):
answer = 0
start_num = 1
while start_num <= n:
num = 0
for i in range(start_num, n//2 + 2):
num += i
if num == n:
answer += 1
break
elif num > n:
break
start_num += 1
return answer + 1
- 리스트를 만들지 않았고, num 변수를 설정하고 num에 i를 더해주면서 num == n 인지 확인했다
- 그리고 for문을 돌 때 절반으로 자른 정수 값 보다 하나 큰 수를 포함하도록( 예: if n=15, 7 + 8 = 15) 해서 for문이 끝까지 돌지 않도록 하고, 대신 answer에 1을 더해줘서 자기 자신일 때를 셀 수 있도록 했다(예: 15 = 15, for문에서 i는 8을 포함하는 것 까지)
- 더더 나은 풀이
def solution(n):
answer = 0
for i in range(1, n//2 + 1):
a = 0
while a <= n:
a += i
i += 1
if a == n:
answer += 1
break
return answer + 1
- 여기는 while이 for문 안에 있고, a를 while 안에서 i를 더해 갱신시키고, 동시에 i값도 1씩 늘려준다
- 효율성을 비교해보면 많이 짧아진 것을 볼 수 있다
도움 주신 분^_^
2번째 풀이: https://ninano1109.tistory.com/15
3번째 풀이: 이준현