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++;}
조건을 이렇게 부여하면 되겠지 했는데 틀린 값이 나왔다.
상단에 서술한 코드블럭처럼 수정 후 옳은 값이 나왔을 때
왜 옳은 값이 나오는지 계속 생각해보며 찾아가 저렇게 동작한다는걸 알아냈다.
제대로 동작하기만 하면 되는게 아니라
내가 동작원리를 이해하는게 더 중요하다.
'Plo Algorithm' 카테고리의 다른 글
프로그래머스 Lv1 없는 숫자 더하기 (0) | 2022.03.15 |
---|---|
프로그래머스 Lv1 문자열을 정수로 바꾸기 (0) | 2022.03.15 |
프로그래머스 Lv1 가운데 글자 가져오기 (0) | 2022.03.15 |
프로그래머스 Lv1 짝수와 홀수 (0) | 2022.03.15 |
프로그래머스 Lv1 직사각형 별찍기 (0) | 2022.03.15 |