알고리즘 - 두 정수 사이의 합

Wonhee 📘·2022년 3월 14일
0

JAVA_알고리즘

목록 보기
5/21
post-thumbnail

알고리즘 문제 "두 정수 사이의 합"를 풀어보았습니다.

문제 설명

두 정수 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 중 작은 숫자와 큰 숫자를 구분하여 작은 숫자부터 큰 숫자까지의 합을 구하는 방식으로 문제를 풀어 보았다.

class Solution {
    public long solution(int a, int b) {
        long answer = 0;
        // a와 b가 같을때는 a값을 출력
        if(a == b){
            answer = a;
            // b가 a보다 클 경우에는 b의 값 만큼 for문을 돌리기
        } else if( a < b){
            for(int i = a; i <= b; i++){
                answer += i;
            }
            // a가 b보다 클 경우에는 a의 값 만큼 for문을 돌리기
        } else if(a > b){
            for(int i = b; i <= a; i++){
                answer += i;
            }
        }
        
        return answer;
    }
}

우선 3가지의 경우로 나누어 볼 수 있다.

  1. a 와 b 의 값이 같을때
  2. a 가 b보다 클때
  3. b가 a보다 클때

a와 b 의 값이 같을 경우에는 아무거나 리턴 하라기에 저는 a값을 출력했습니다.
그리고 나머지는 작은 수에서 큰 수까지의 합을 구하는 것이기에
a와 b중 누가 더 크냐를 구분하여 그에따른 결과값만 나누어 주면되는 문제입니다.
for문에 내용을 보면 i 는 작은수의 값이 대입이되어 시작하게 됩니다.
입출력 예시에 1번 으로 예를 들면 i = 3 이 될것이고 b는 5가 됩니다.
첫 for문에서는 answer = 3;
두번째 for문에서는 answer = 3 + 4;
세번째 for문에서는 answer = 3 + 4 + 5;
가 되어 총합 12가 나올 것입니다.
아래 코드로 확인해주세요

class Solution {
   public long solution(int a, int b) {
       long answer = 0;

			if( 3 < 5){
           	for(int i = 3; i <= 5; i++){
               	 answer += 3; //1번째 for문 실행시
            //   answer += 7; //2번째 for문 실행시
            //   answer += 12; //3번째 for문 실행시
           	}
       } 
       return answer;
   }
}

문제풀이 이후에 좀 더 좋은 코드로 작성할 수 없을까 싶은 생각에 다시한번 풀어보았다.
if문을 줄여본 방법으로 a 와 b 의 자리에 작은 수가 a에, 큰 수가 b에 들어가게끔 변수를 선언한 후 대입하여 작성해보았다.

class Solution {
    public long solution(int a, int b) {
        long answer = 0;
        int max = Math.max(a,b);
        int min = Math.min(a,b);
        // System.out.println();
        
        if(a == b){
            answer = a;
        } else if( min < max){
            for(int i = min; i <= max; i++){
                answer += i;
            }
        }
        
        return answer;
    }
}

위와 같이 테스트 통과하는 결과물이 나온다.

profile
오늘 걷지 않으면 내일은 뛰어야한다 🚶‍♂️ 🏃‍♀️

0개의 댓글