<로직 고민>
- 일단 a, b의 대소 관계가 정해져 있지 않다고 하니 정렬을 먼저 하는 게 좋을 것 같다
- 아 if-elif-else 써야겠다 두 수가 같은 경우, a가 큰 경우, b가 큰 경우
- 음.. 아니 두 수를 리스트에 넣어서 정렬하는 게 낫나?
- 아 그냥 두 수의 작은 값부터 큰 값까지 for문을 돌려서 1씩 늘려가며 answer에 더해주는 게 좋겠다
- 이렇게 첫 번째 풀이는 나왔는데 코드를 더 줄이거나 또다른 방법은 없을까?
- 일단 for문 안에서 n += 1 하는 것보다 range 함수의 매개변수를 이용해서 1씩 증가하도록 바꿔주었다
- 흠 한 줄 코딩 도전?
- 근데 이거 실행 시간 줄이는 게 관건인 문제였나보다 시간이 꽤 걸려서 식겁했네..
- 난 아직도 이렇게 문제 보는 눈이 부족하다,,,,
- 일단 시간복잡도를 줄이려면 for문을 안 쓰는 방법을 찾아봐야 할 텐데...
- 3번째 풀이에서 for문을 빼도 정답이 되네..!
- 4번째 풀이로 속도가 확실히 줄긴 했다
- 이렇게 보니 1번째 풀이랑 2번째 풀이도 속도 차이가 확 나네
- 근데 3번째 풀이로 채점했다....ㅠㅠ 1점밖에 못 얻었다,,,,
- 기껏 시간 줄여놓고 다시 늘린 버전으로 채점을 매기다니 난 바보야
- 그나저나 절대값이 같은 음수와 양수는 합이 0이네
- a나 b 중 하나가 음수면 일단 그 사이 절대값이 같은 값들은 다 0이란 소리잖아
- 아 시간만 더 있으면 더했을 때 0이 되는 값들은 처음부터 sum에서 제외할 방법을 찾을 수 있을 거 같은데 지금 시간이 없다....다섯 번째 풀이에서 만족해야겠다....
<완성된 코드>
- 첫 번째 풀이
def solution(a, b):
answer = 0
for n in range(min(a, b), max(a,b)+1):
answer += n
n += 1
return answer
- 두 번째 풀이
def solution(a, b):
answer = 0
for n in range(min(a, b), max(a,b)+1, 1):
answer += n
return answer
- 세 번째 풀이
def solution(a, b):
return sum(n for n in range(min(a, b), max(a,b)+1, 1))
- 네 번째 풀이
def solution(a, b):
return sum(range(min(a, b), max(a, b) + 1, 1))
- 다섯 번째 풀이
def solution(a, b):
if max(abs(a), abs(b)) - min(abs(a), abs(b)) == 0:
return 0
else:
return sum(range(min(a, b), max(a, b) + 1, 1))
<다른 사람 풀이>
- 천재풀이1
def solution(a, b):
if a > b:
a, b = b, a
return sum(range(a, b + 1))
- 매우 간단하네..
- 변수 저렇게 넣어주는 거 알고 있었는데 쓸 생각을 못 했다,,
- 근데 실행시간은 내 다섯 번째 풀이랑 비슷한 듯?
- if문으로 누가 더 큰지 가리든 max, min 쓰든 성능에 별 차이는 없는 것 같다
- 그나저나 range() 함수 gap 기본값이 1이라서 3번째 매개변수 굳이 안 써도 됐는데 나는 썼네
- 근데 속도 측정해보니까 gap 자리에 1 써주는 게 조금 더 빠름!!
- 천재풀이2
def solution(a, b):
return (abs(a - b) + 1) * (a + b) // 2
- 와 이거다...
- 수학을 잘해야 하네....난 이런 식 생각도 못 하지...~.......ㅜ....ㅠㅠ.......
- 1부터 n 사이의 합 공식은 n(n + 1) / 2 이고, n부터 m 사이의 합 공식은 (|n - m| + 1) * (n + m) / 2
- 풀어쓰면 수의 개수(끝수 + 첫수) / 2 인 것이다
- 예시가 a = 100, b = -150인 경우, -100 + 100 해서 0 되고 -101부터 -150까지 더한다
- n부터 m 사이의 합 공식에 대입하면 {|(-101) - (-150)| + 1} * {(-101) + (-150)} / 2 = - 6,275 가 나온다
- n부터 m 사이의 합 공식을 그대로 활용해서 해결한 것이다..!!!