본문 바로가기

Plo Algorithm

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

두 정수 사이의 합 구하기


class Solution {
    public long solution(int a, int b) {
        long answer = 0;
        if(a != b){
            while(a < b){
                answer += a++;
                }
            while (b <= a){
                answer += b++;
                }
        }else{
            answer = a;
        }
        return answer;   
    }
}

solution.solution(3,5)

상단의 코드 처럼 메서드의 파라미터 값을 전달했을 때로 예를 들겠다.

 

if(a ! = b){}else{}

a와 b가 같지않은 경우에는 if안의 코드블럭을 실행 , 같은 경우는 파라미터 둘중 하나를 아무거나 리턴한다.

 

--파라미터 a가 파라미터 b보다 작은 경우--

while(a < b){answer += a++;}

1번째 loop : answer에는 3이 할당되고 a++된다.

//a=4

2번째 loop : answer에는 4가 할당되고 a++된다.

//a=5 상태로 loop 탈출

 

            while (b <= a){answer += b++;}

상단 코드블럭에서 탈출한 a는 해당 코드블럭 조건에 적합해진다.

a가 b와 같은 값일 때도 실행되기에 탈출한 값인 a=5 , b=5 인 상태로 코드블럭이 실행된다.

 

answer += b++

answer에 b가 한번 더 더해진 후에 b는++되고

조건에 부합하지 않기 때문에 반복이 한번 더 실행되지 않는다.


--파라미터 b가 파라미터 a보다 작은 경우--

while (b <= a){answer += b++;}

반대로 b가 a보다 작은 파라미터로 들어온 경우에는

1번째 loop : answer에는 3이 할당되고 b++된다.

// b = 4

2번째 loop : answer에는 4가 할당되고 b++된다.

// b = 5

3번째 loop : answr에는 5가 할당되고 b++된다.

// b = 6 조건에 부합하지 않는다.


if문으로 조건을 두개 만들어 준다거나

for문을 사용했으면 이해하는데 조금 덜 복잡했을 문제였던 것 같다.

처음에 while문을 사용하면 되겠다 생각하고 

while(a <= b){answer += a++;}

while (b <= a){answer += b++;}

조건을 이렇게 부여하면 되겠지 했는데 틀린 값이 나왔다.

상단에 서술한 코드블럭처럼 수정 후 옳은 값이 나왔을 때

왜 옳은 값이 나오는지 계속 생각해보며 찾아가 저렇게 동작한다는걸 알아냈다.

제대로 동작하기만 하면 되는게 아니라

내가 동작원리를 이해하는게 더 중요하다.