▶ 문제
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수 solution 만들기
ex) a = 3, b = 5인 경우, 3+4+5=12 이므로 12를 리턴한다.
▶ 제한조건
a와 b가 같은 경우는 둘 중 아무 수나 리턴
a와 b는 -10,000,000 이상 10,000,000 이하인 정수
a와 b의 대소관계는 정해져 있지 않음
▶ 풀이
a 부터 b 까지 범위를 지정해준 다음에 하나씩 다 더한다.
큰수부터 작은수를 더하는거나, 작은수부터 큰수를 더하는거나 의미는 똑같으니까 range(a,b)를 쓰든 range(b,a)를 쓰든 상관없지 않을까
근데 문제는 range의 (start, stop) 에서 stop 은 미포함이라는점 ㅜ
range(a, b+1) 로 범위를 지정하자니 b가 더 작은 수일 경우에는 성립하지 않는다... 그러면 그냥 b를 따로 더해준다. 어차피 정수의 합이니까!
근데 또 그렇게 하면 a=b 일 경우에 두번 더하는 셈이 되어버리니까 따로 빼주기
def solution(a, b):
total = b # b는 따로 더해줌
if a == b: # a, b가 같으면
return total # 그냥 반환
for i in range(a,b):
total += i
return total # 틀림.....
틀림ㅠ
range(start, stop) 에서 start 가 더 크면 안되나?
실험해보기
for i in range(1,5): # start < stop
print(i) # 1 2 3 4
for i in range(5,1): # start > stop
print(i) # 아무것도 안나옴
진짜 안되네
찾아본 결과!!!
큰수에서 작은수를 지정할 때는 step을 추가해서 지정해야함. range(start, stop, step)
for i in range(5,1,-1):
print(i) # 5 4 3 2
그럼 a > b 인경우를 따로 나눠주기
def solution(a, b):
total = b # b는 미포함이니 따로 더한다
if a < b: # a가 작은 수면
for i in range(a,b): # a ~ b (+1) 간격으로
total += i # total에 하나씩 더한다
elif a > b: # a가 큰 수면
for i in range(a,b,-1): # a ~ b (-1) 간격으로
total += i # total에 하나씩 더한다
return total # total 반환
통과!
+
다른사람 풀이 보고 공부해봤는데
a < b, b > a 의 경우를 따로 나누지 않고 b > a 일 경우 두 값을 바꿔주는 방식을 쓰면 범위를 한번에 지정할 수 있다.
두 값을 서로 바꾸기 : a, b = b, a
그리고 굳이 total 변수에 하나씩 더하지 않고 그냥 sum()함수를 써도 된다.
range() 범위도 sum()으로 합산할 수 있다
def solution(a, b):
if a > b:
a, b = b, a
return sum(range(a, b+1))
통과!
'codekata' 카테고리의 다른 글
[프로그래머스] #24 서울에서 김서방 찾기 (0) | 2024.07.21 |
---|---|
[프로그래머스] #23 콜라츠 추측 (0) | 2024.07.19 |
[프로그래머스] #21 하샤드 수 (0) | 2024.07.19 |
[프로그래머스] #20 정수 내림차순으로 배치하기 (sort, sorted) (0) | 2024.07.18 |
[프로그래머스] #19 정수 제곱근 판별 (** % 잘쓰기) (0) | 2024.07.18 |