
프로그래머스 LV1 두 정수 사이의 합 연습문제
2021, Apr 02
프로그래머스 lv1 두 정수 사이의 합(연습문제)
문제 설명
두 정수 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의 대소관계는 정해져있지 않습니다.
입출력 예
a | b | return |
---|---|---|
3 | 5 | 12 |
3 | 3 | 3 |
5 | 3 | 12 |
풀이
# 잘못된 풀이
def solution(a,b):
if a == b:
return a
elif a > b:
a, b = b, a
c = list(range(a,b+1))
else:
c = list(range(a,b+1))
return sum(c)
if __name__ =='__main__':
a = 5
b = 3
print(solution(a,b))
# 위 코드를 테스트 해본 결과 5,6,7,8,9,10에서 속도가 좋지 않았다.
>>>
테스트 1 〉 통과 (0.01ms, 10.2MB)
테스트 2 〉 통과 (0.01ms, 10.1MB)
테스트 3 〉 통과 (0.01ms, 10.2MB)
테스트 4 〉 통과 (838.73ms, 746MB)
테스트 5 〉 통과 (567.83ms, 521MB)
테스트 6 〉 통과 (495.00ms, 438MB)
테스트 7 〉 통과 (236.47ms, 215MB)
테스트 8 〉 통과 (370.43ms, 346MB)
테스트 9 〉 통과 (293.96ms, 263MB)
테스트 10 〉 통과 (67.68ms, 67.5MB)
테스트 11 〉 통과 (0.32ms, 10.3MB)
테스트 12 〉 통과 (1.05ms, 10.7MB)
테스트 13 〉 통과 (0.42ms, 10.2MB)
테스트 14 〉 통과 (0.01ms, 10.2MB)
테스트 15 〉 통과 (0.04ms, 10.2MB)
테스트 16 〉 통과 (0.17ms, 10.3MB)
# 다른 사람 풀이. 등차수열로 풀었다.
def solution(a, b):
return (abs(a-b)+1)*(a+b)//2
if __name__ =='__main__':
a = 2
b = 3
print(solution(a,b))
>>>
통과 (0.00ms, 10.2MB)
테스트 2 〉 통과 (0.00ms, 10.2MB)
테스트 3 〉 통과 (0.00ms, 10.2MB)
테스트 4 〉 통과 (0.00ms, 10.1MB)
테스트 5 〉 통과 (0.01ms, 10.1MB)
테스트 6 〉 통과 (0.00ms, 10.2MB)
테스트 7 〉 통과 (0.01ms, 10.2MB)
테스트 8 〉 통과 (0.00ms, 10.1MB)
테스트 9 〉 통과 (0.00ms, 10.1MB)
테스트 10 〉 통과 (0.00ms, 10.2MB)
테스트 11 〉 통과 (0.00ms, 10.2MB)
테스트 12 〉 통과 (0.00ms, 10.2MB)
테스트 13 〉 통과 (0.00ms, 10.2MB)
테스트 14 〉 통과 (0.00ms, 10.1MB)
테스트 15 〉 통과 (0.00ms, 10.3MB)
테스트 16 〉 통과 (0.00ms, 10.2MB)
위 풀이에서 배울 것.
숫자가 공차 1로 일정하므로 abs(a-b)+1로 전체 숫자 개수 n을 구했다.
abs(x)
절대 값.
/ = 나누기(소숫점 포함)
// = 나누기(소숫점 이하 버리기)
그리고 등차수열. a부터 b까지의 등차수열을 구하면
n(a + l)//2
:첫째항과 끝항을 알 때 등차수열 공식
n{2a+(n-1)d}//2
: 첫째항과 공차 d를 알 때의 공식
#공차 d로 다시 한번 코드를 짜보면
a =3
b =5
print((abs(a-b)+1)*(2*a+(abs(a-b)))//2)
>>> 12
# 다른 사람 풀이2
def adder(a, b):
return sum(range(min(a,b),max(a,b)+1))
if __name__ =='__main__':
a = 5
b = 3
print(adder(a,b))
위 코드에서 배울 점
min(a,b)
max(a,b)
함수를 쓸 생각을 한 것.
함수들을 써서 굉장히 쉽게 풀었음.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges