오늘도 파이썬
나는 발전 중이다 3번 복창하면서 시작
sum(range()) 되는지 안되는지는 모르지만 일단 고
return 을 안넣어서 결과가 출력이 안되는 불상사가 잠시 있었다(머쓱)
그래도 생각 좀 정리하고 하니까 금방 풀렸다
하지만 항상 더 좋은 코드가 있지
def solution(a, b):
if a > b:
return sum(range(b,a+1))
elif b > a:
return sum(range(a,b+1))
else:
return a
다른 사람의 풀이
a, b = b, a !!
완전 기억 속에서 없어져있던 걸 쓰셨다
근데 댓글에
a,b가 같은 숫자일 경우도 같이 처리 해주셨으면 다른 케이스에서도 속도가 올라갔을거예요~!
이런말이 있어서 이것도 유의해야겠다 싶었다
def adder(a, b):
if a > b:
a, b = b, a
return sum(range(a, b + 1))
이것은 뭔가 좋은 코드 같은데
왜 이렇게 했는지까지는 이해가 잘 안간다
이 코드가 시간복잡도 O(1)이라고....
이해하려고 댓글을 봐도
n(n+1)/2를 이용했다는데
... 수학공부를 다시 해야겠다
def adder(a, b):
return (abs(a-b)+1)*(a+b)//2
+) 친구가 설명해줘서 이해했다
n(n+1)/2 가 n까지의 합인데
a와 b사이의 합을 구해야하니까
b까지의 합 - a까지의 합 + 빠져버리는 a 다시 더하기 → b(b+1)/2 - a(a+1)/2 + a
이 식을 다시 정리하면 (b+a)(b-a+1)/2
a, b의 크기는 안정해져서 b-a했을 때 마이너스가 될 수도 있으니
abs로 절대값 만들어주기
휴 설명 끝
난 이해했다
그럼 참고가 됐기를 바라며
친구에게 이 공을 돌립니다
출처 : 프로그래머스
'코딩테스트' 카테고리의 다른 글
[프로그래머스] [SQL] 대여 기록이 존재하는 자동차 리스트 구하기 (1) | 2023.11.09 |
---|---|
[프로그래머스] [Python] 머쓱이보다 키 큰 사람 (0) | 2023.11.07 |
[프로그래머스] [Python] 핸드폰 번호 가리기 (1) | 2023.11.03 |
[프로그래머스] [Python] 정수 내림차순으로 배치하기 (0) | 2023.11.02 |
[프로그래머스] [Python] 짝수의 합 (1) | 2023.11.01 |