📝 문제
> 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
3번째 케이스는 3 + 4 + 5 = 12가 되는 것이다.
https://programmers.co.kr/learn/courses/30/lessons/12912
코딩테스트 연습 - 두 정수 사이의 합
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가 같은 경우
programmers.co.kr
🎨 풀이
💡 첫 번째 시도 = 성공
def solution(a, b):
# 큰 수 합에서 작은 수 합 빼는 방식
if a == b :
return a
if a > b :
n1 = a * (a + 1) // 2
n2 = (b - 1) * b // 2
return n1 - n2
else :
n1 = (a - 1) * a // 2
n2 = b * (b + 1) // 2
return n2 - n1
> a 와 b 대소관계에 따라 조건을 나눠둔 것이다.
1. a와 b가 같다면 둘 중 하나를 리턴해준다.
2. a가 b보다 크다면, 1부터 a까지 더해준 값에서 1부터 b까지 더해준 값을 뺀다. (시그마)
3. b가 a보다 크다면, 1부터 b까지 더해준 값에서 1부터 a까지 더해준 값을 뺀다.
💡 두 번째 시도 = 훨씬 간단한 ver.
def solution(a, b):
answer = 0;
a, b = min(a,b), max(a,b)
for num in range(a,b+1):
answer += num
return answer
> 이 코드는 a에는 작은 수, b에는 큰 수가 들어가게 한 후 for문을 돌려서 차례대로 더해주는 코드다.

끝~
⭐ 느낀점
> 첫번째 코드를 리뷰하다보니 다른 아이디어가 생각이 나서 해봤는데, 바로 통과가 되었다. 이런 맛에 알고리즘 문제 푸는건가 라는 생각이 좀 든다. 저 문제를 풀 당시에는 min(x,y) 이런걸 잘 활용을 못해서 코드가 저렇게 어려워졌나보다. 딱 보면 이해는 안가고 뭔가.., 별 찍기 같아보이는 코드인데 잘 바꾼 것 같다. 기분이 좋다. ㅎ_ㅎ 그리고 당분간은 시험도 많고 할일도 좀 많아서 연습문제를 계속 풀기로 했다. 아마 연습문제를 다 풀 것 같지는 않고 그래도 좀 쉽지 않았거나 창의적이였다고 생각하는 코드 위주로 해볼 생각이다. 파이팅~
'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Level 1] 문자열 내 p와 y의 개수 (파이썬) (0) | 2022.04.21 |
---|---|
[프로그래머스 / Level 1] 문자열 내 마음대로 정렬하기 (파이썬) (0) | 2022.04.20 |
[프로그래머스 / Level 1] 나누어 떨어지는 숫자 배열 (파이썬) (0) | 2022.04.18 |
[프로그래머스 / Level 1] 같은 숫자는 싫어 (파이썬) (0) | 2022.04.17 |
[프로그래머스 / Level 1] [1차] 다트 게임 (파이썬) 🎯 (1) | 2022.04.16 |