포시코딩

[프로그래머스][Lv.1] 두 정수 사이의 합 본문

자료구조알고리즘/문제풀이

[프로그래머스][Lv.1] 두 정수 사이의 합

포시 2022. 12. 21. 09:17
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12912

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 풀이

# 1부터 n까지의 합을 구하는 방법에 대해 삼각형-사각형을 만들어 구하는 방법을
# n부터 m까지의 합을 구하는 방법에도 적용해볼 수 있다.
# 적용한다면 (b-a+1)*(b+a)/2
# 예외처리 1) a와 b가 같을 경우
# 예외처리 2) 위 공식은 b가 더 클 경우만 적용됨 a가 더 클 경우에 대해 고려
def solution(a, b):
    if a == b:
        return a
    if a > b:
        a, b = b, a
    answer = (b-a+1)*(b+a)/2
    
    return answer

그래도 예전에 Javascript로 풀 때 고민을 많이 했던 문제라 기억에 남아있었다.

제한조건을 보면

  • a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
  • a와 b의 대소관계는 정해져있지 않습니다.

이렇게 되어 있는데, for문으로 하나하나 더하는 방식 말고 다른 방식을 쓰라는걸 유추할 수 있고, 

내가 테스트케이스로 고려 안한 a가 더 큰 경우에 대해서도 힌트를 주고 있었다.

 

제한조건을 잘 살펴보고 문제를 풀도록 하자.

 

다른 풀이

def solution(a, b):
    if a == b:
        return a
    answer = (abs(b-a)+1)*(b+a)/2
    
    return answer

대소관계 문제에 대해 abs()를 통해 해결해버린 코드다.

728x90