두 정수 사이의 합

수이·2025년 3월 12일
0

🟢 코드카타 / PYTHON

목록 보기
22/46
post-thumbnail

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
문제링크

풀이

1) 오답 - 런타임에러

def solution(a, b):
    answer = 0
    for i in range(min(a,b), max(a,b) + 1):
        answer += sum(int(digit) for digit in str(i))
    return answer

아니 일단 왜 이렇게 풀었냐면, 하샤드 수 할때처럼 리스트를 만들고 추가하는 방식을 리스트 없이 하는 짱멋진 풀이가 있었기 때문에 나도 따라하고싶었음

예를 들어 (a, b) = (3, 5)면
a, b 사이 범위를 돌면서 더해주면 된다고 생각했음

근데 저기서 두번째 for을 왜 썼냐
지금은 이해가 안 되긴 한데 기존 풀었던 몇몇 문제랑 짬뽕돼서 그런 것 같음

"빈 리스트에 문자열로 추가하고 그걸 다시 정수형으로 변환하면 된다" 여기에 꽂혀서 3, 4, 5 로 구한 걸 다시 "3","4","5"로 만들고 다시 3, 4, 5로 만들어버린 것이다....

심지어 테스트케이스를 3,5로 하나로만 한정해둬서 VSCODE에서 잘 돌아가길래 자신있게 제출했는데 런타임에러가 뜸

낑낑대다가 조원분들한테 질문하니 왜 두번째 for문을 사용했냐고 질문하셔서 정리하면서 말씀드리다 보니 말이 안 되는 걸 알게 됐다

(도와주신 동진님, 동현님께 감사👼)

2) 그래서 다시 풀기
for문을 다 떼고 answer에 집어넣어줌
되나 싶어서 해본 건데 정답처리돼서 럭키비키쟈나 가 아니고 sum(range(a,b)) 이렇게도 쓸 수 있는 이유를 알아봤음

range(a,b) = iterable
sum = iterable한 요소를 모두 더해주는 함수

라서 성립가능

def solution(a, b):
    answer = sum(range(min(a,b), max(a,b) +1))
    return answer

또 오늘도 쉬운 길을 어렵게 돌아갔네 하핫
이거 푼다고 1시간이나 걸림 이게 말이 돼?
하지만 크나큰 도움이 되는 문제였다 좋아요좋아요

0개의 댓글

관련 채용 정보