4. 두 정수 사이의 합

김영민·2022년 1월 27일
0

문제📃

1. 문제 설명

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

2. 제한 조건

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

3.입출력 예

abreturn
3512
333
5312

풀이

나의 정답👨‍💻

public class SumBtwTwoInt {	

    // a와 b 두 정수를 매개변수로 받고, 긴 정수를 리턴값으로 돌려주는 메소드 생성
    public long solution1(int a, int b) {
    
        // answer값을 선언(0은 한자리 숫자이기 때문에 int 범위내에 있어서 
        // 'L'을 표기하지 않아도 된다)
        long answer = 0;
        
        // a가 b보다 작을 때
        if(a < b){
            // a로 초기화 된 정수 i를 b의 값과 같아질 때까지 answer값에 더한다.
            for(int i = a; i <= b; i++){
                answer += i;
            }
            
        // b가 a보다 작을 때    
        } else if(b < a){
            // b로 초기화 된 정수 i를 a의 값과 같아질 때까지 answer값에 더한다.
            for(int i = b; i <= a; i++){
                answer += i;
            }
        // a와 b가 같다면
        } else {
          answer = a; // a를 answer값으로 돌려준다. (answer = b; 라고 해도 무관)
        }
        return answer;
    }

발전된 정답👍️

    public long solution2(int a, int b) {
        long answer = 0;
        
        if(a < b){
            for(int i = a; i <= b; i++){
                answer += i;
            }
            
        // else는 'b < a' 뿐만 아니라 'b = a'의 경우도 포함한다. 
        // 따라서 a와 b가 같다면 반복문을 돌려도 처음 들어간 값으로 한 번만 돌아가기 때문에
        // answer값은 b와 같은 값으로 돌려준다.
        } else {
            for(int i = b; i <= a; i++){
                answer += i;
            }
        }
        return answer;
    }

심화정답 1🏆

    public long solution3_1(int a, int b) {
    
    	// Math.min(a,b) : a와 b중 작은 값, Math.max(a,b) : a와 b중 큰 값
        // 우선 sumAtoB라는 값 안에 a와 b의 대소 관계를 설정 한 후
        // (앞에가 작은 숫자, 뒤에가 큰 숫자),
        return sumAtoB(Math.min(a, b), Math.max(b, a));
    }
    
    // 리턴값 sumAtoB을 메소드로 받아 위에 나왔던 작은 값을 a에, 큰 값을 b에 부여한다.    
    public long sumAtoB(long a, long b) {
        // 그렇게 새로 정의 된 a와 b를 등차수열의 합 공식을 이용하여
        // a와 b 사이의 합을 구한다.
        return (b - a + 1) * (a + b) / 2;
    }

심화정답 2🏆

    public long solution3_2(int a, int b) {
        long answer = 0;
        
        // 반복문을 이용하여 바로 작은 값부터 큰 값까지 더해준다
        for (int i = Math.min(a, b); i <= Math.max(a, b); i++) {
            answer += i;
        }
        return answer;
    }

테스트용 코드🎯

    public static void main (String[] args) {
        SumBtwTwoInt sumbtwtwoint = new SumBtwTwoInt();
				
        System.out.println(sumbtwtwoint.solution1(3, 5)); // 12 출력
        System.out.println(sumbtwtwoint.solution2(3, 5)); // 12 출력
        System.out.println(sumbtwtwoint.solution3_1(3, 5)); // 12 출력
        System.out.println(sumbtwtwoint.solution3_2(3, 5)); // 12 출력
        
        System.out.println(sumbtwtwoint.solution1(3, 3)); // 3 출력
        System.out.println(sumbtwtwoint.solution2(3, 3)); // 3 출력
        System.out.println(sumbtwtwoint.solution3_1(3, 3)); // 3 출력
        System.out.println(sumbtwtwoint.solution3_2(3, 3)); // 3 출력
        
        System.out.println(sumbtwtwoint.solution1(5, 3)); // 12 출력
        System.out.println(sumbtwtwoint.solution2(5, 3)); // 12 출력
        System.out.println(sumbtwtwoint.solution3_1(5, 3)); // 12 출력
        System.out.println(sumbtwtwoint.solution3_2(5, 3)); // 12 출력
    }
}
profile
Macro Developer

0개의 댓글