문제
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
제한조건
- a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
- a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
- a와 b의 대소관계는 정해져있지 않습니다.
해설
1. 반복문으로 풀기
def solution(a, b):
answer = 0
if (a == b):
return a
n = b if a > b else a
m = a if a > b else b
for i in range(n - 1, m):
answer += i + 1
return answer
둘 중 작은 숫자부터 큰 숫자까지 반복문으로 +1씩 하면서 answer에 더해가면서 정답 도출
하지만 시간복잡도가 O(n)이기 때문에, 두 정수 사이의 차이가 크면 시간복잡도가 증가한다.
2. 등차수열로 풀기
def solution(a, b):
answer = 0
if (a == b):
return a
n = b if a > b else a
m = a if a > b else b
if (m - n % 2 == 1):
answer = (n + m) * (m - n + 1) / 2
else:
answer = (n + m) * (m - n) / 2 + n + (m - n) / 2
return answer
둘 중 작은 수부터 큰 수까지 1씩 더해가기 때문에 등차수열의 합으로 풀어보자. 두 숫자의 양끝을 더해서 중간까지 더하는 식을 사용하면 위와 같이 도출할 수 있다.
같은 결과를 도출하지만, 시간 복잡도가 O(1)이므로 시간복잡도가 빨라진 것을 확인할 수 있다.
'Python' 카테고리의 다른 글
프로그래머스 - 부족한 금액 계산하기 (0) | 2024.03.31 |
---|---|
프로그래머스 - 핸드폰 번호 가리기 (0) | 2024.03.28 |
프로그래머스 연습문제 - 정수 제곱근 판별 (0) | 2024.03.27 |
[좌충우돌, 파이썬으로 자료구조 구현하기] 이진 탐색 트리 구현하기 (0) | 2023.09.21 |
[좌충우돌, 파이썬으로 자료구조 구현하기] 더 맵게 - 프로그래머스 (0) | 2023.09.19 |