Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 알리
- You should consider upgrading
- 오류
- 조맹크로키
- 취미미술
- 마이그레이트
- ModuleNotFoundError
- 블린이
- ValueError
- Migrate
- navbar
- scotty
- TemplateSyntaxError
- 크로키
- 조맹클래스101
- 마이그레이션
- Uncaught SyntaxError
- pip install --upgrade pip
- Python
- bootstrap4
- junny
- Django
- error
- include
- JavaScript
Archives
- Today
- Total
내가 하고 싶은 것들 중 하나
[프로그래머스] 숫자의 표현 본문
- 나는 합을 구하라고 하면.. 리스트에 어펜드해서 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번째 풀이: 이준현
'알고리즘' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 (0) | 2020.05.17 |
---|
Comments