728x90
programmers.co.kr/learn/courses/30/lessons/12924
접근
투포인터를 사용해보았다.
1~n까지 포함된 리스트를 생성하였고 left와 right는 각 숫자의 인덱스를 가리키도록 하였다.
그리고 left부터 right까지의 합이 n미만이면 right를 증가 초과면 left를 증가시켜 합이 n이 되는 연속된 수의 합을 찾았다.
구현
left가 right를 넘어서거나 right가 n을 넘어서면 while문을 종료시켰다.
그리고 left와 right가 같은 곳을 가리키면 total에 left를 넣었으면 다른 숫자를 가리킬 때는 left부터 right까지의 숫자들을 합하였다.
이렇게 연속된 수들을 합한 결과가 n미만이면 right를 증가시켰고 초과한다면 left를 증가시켰다.
그리고 합이 n과 같다면 최종해인 answer를 증가시키면서 right도 증가시켰다.
예를 들어 n이 15가 들어오고 합이 n과 같을 때 left를 증가시킨다면 left가14 right15일 때 15를 또 증가시켜 n을 가리키는 것이 중복되어 틀리게된다. 따라서 right를 증가시키도록 했다.
def solution(n):
answer = 0
numbers = [i+1 for i in range(n)]
left = right = 0
while left <= right and right <= n:
total = 0
if left == right:
total = left
else:
total = sum(numbers[left:right+1])
if total < n:
right += 1
elif total > n:
left += 1
else:
right += 1
answer += 1
return answer
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[Level 2] 튜플 (0) | 2021.02.26 |
---|---|
[Level 2] 다음 큰 숫자 (0) | 2021.02.26 |
[Level 3] N-Queen (0) | 2021.02.24 |
[프로그래머스] K번째 수 - map(), filter(), sort() (0) | 2021.02.23 |
[Level 3] 정수 삼각형 (0) | 2021.02.23 |