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

2024. 10. 14. 13:37·여러가지/알고리즘 & 자료구조

두 정수 사이의 합 문제 해결

문제 설명

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

제한 조건

a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
a와 b의 대소관계는 정해져있지 않습니다.

입출력 예

a b return
3 5 12
3 3 3
5 3 12

해결 방법

1. 반복문을 이용한 직관적인 방법

class Solution {
    public long solution(int a, int b) {
        long answer = 0;
        int start = Math.min(a, b);
        int end = Math.max(a, b);
        for (int i = start; i <= end; i++) {
            answer += i;
        }
        return answer;
    }
}
  • 핵심 아이디어:
    • Math.min과 Math.max를 이용하여 a와 b 중 작은 값을 start, 큰 값을 end에 저장합니다.
    • start부터 end까지 반복하며 각 숫자를 answer에 더합니다.
  • 장점:
    • 직관적이고 이해하기 쉽습니다.
    • 다양한 언어에서 사용 가능한 기본적인 방법입니다.

2. 수학 공식을 이용한 효율적인 방법

class Solution {
    public long solution(int a, int b) {
        long n = Math.abs(b - a) + 1;
        return n * (a + b) / 2;
    }
}
  • 핵심 아이디어:
    • 등차수열의 합 공식 (n * (a + l) / 2)을 이용합니다.
    • n은 항의 개수, a는 첫째항, l은 마지막 항을 의미합니다.
  • 장점:
    • 반복문을 사용하지 않아 연산 속도가 빠릅니다.
    • 수학적인 지식을 활용하여 간결하게 표현할 수 있습니다.

시간 복잡도 비교

  • 반복문: O(n) (n은 a와 b 사이의 수의 개수)
  • 수학 공식: O(1) (상수 시간)

공간 복잡도 비교

  • 반복문: O(1) (추가적인 메모리 사용량이 거의 없음)
  • 수학 공식: O(1) (추가적인 메모리 사용량이 거의 없음)

결론

  • 일반적인 경우: 두 방법 모두 문제를 해결할 수 있지만, 수학 공식을 이용한 방법이 더 효율적입니다.
  • 큰 수를 다루는 경우: 수학 공식을 이용한 방법이 더욱 유리합니다.
  • 코드 가독성: 반복문을 이용한 방법이 더 직관적일 수 있습니다.

최적의 방법 선택:

  • 성능: 수학 공식을 이용한 방법을 추천합니다.
  • 가독성: 반복문을 이용한 방법을 추천합니다.
  • 문제의 제약 조건: 입력 범위나 메모리 제한 등에 따라 적절한 방법을 선택해야 합니다.

주의사항:

  • 정수 범위: 문제에서 주어진 정수 범위를 고려하여 자료형을 선택해야 합니다.
  • 오버플로: 계산 결과가 int형의 범위를 넘어설 수 있으므로 long형을 사용하는 것이 좋습니다.

참고:

  • 수학 공식을 이용한 방법은 등차수열의 합 공식을 알고 있어야 적용할 수 있습니다.
  • 두 방법 모두 a와 b의 대소관계를 고려하여 구현해야 합니다.
저작자표시 (새창열림)

'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글

[프로그래머스] 음양 더하기  (1) 2024.10.14
[프로그래머스] 콜라츠 추측  (0) 2024.10.14
[프로그래머스] 하샤드 수  (0) 2024.10.14
[프로그래머스] 정수 제곱근 판별  (1) 2024.10.14
[프로그래머스] 정수 내림차순으로 배치하기  (1) 2024.10.14
'여러가지/알고리즘 & 자료구조' 카테고리의 다른 글
  • [프로그래머스] 음양 더하기
  • [프로그래머스] 콜라츠 추측
  • [프로그래머스] 하샤드 수
  • [프로그래머스] 정수 제곱근 판별
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (286) N
      • 여러가지 (107)
        • 알고리즘 & 자료구조 (72)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (38)
        • 파이썬 (30)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3) N
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (5)
        • 암호화폐 (5)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DP
    mybatis
    spring
    docker
    Redis
    그리디
    java
    FastAPI
    RDS
    프로그래머스
    WebFlux
    파이썬
    백준
    celery
    Python
    시험
    ecs
    SAA
    EC2
    OOP
    항해99
    AWS
    Spring Boot
    Docker-compose
    reactor
    Spring WebFlux
    취업리부트
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    완전탐색
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[프로그래머스] 두 정수 사이의 합
상단으로

티스토리툴바