본문 바로가기

diary/codestates (be39)

05/06/22 [pair: java: 반복문: 2] if-elseif-for-if-....

makeMultiplesOfDigit2

두 수를 입력받아 두 수를 포함해 두 수 사이의 수 중 2의 배수의 개수를 리턴하기

두 수(num1, num2)는 양의 정수(int)

 

Pair)

 

1. 2의 배수의 개수를 카운트할 count 변수를 선언하고 초기값을 0으로 준다.

 

int count = 0;

 

 

2. num1==num2 이면서 짝수이고, 0이 아닌 경우 count는 1이다.

 

if(num1==num2 && num1 % 2 == 0 && num1 != 0){
    count = 1;
}

 

 

3. num1>num2일 때 (for문) 둘 중 작은 수(num2)부터 큰 수(num1)까지의 값을 1씩 증가시키면서 (if문) 2의 배수라면 count를 1씩 증가시킨다. (num2가 0인 경우는 제외한다)

 

else if(num1>num2){
    for(int i=num2; i<=num1; i++){
        if(i%2==0 && i!=0){
            count++;
        }
    }
}

 

3. num2>num1인 경우를 2와 같은 방법으로 연산한다.

 

else if(num2>num1){
    for(int i=num1; i<=num2; i++){
        if(i%2==0 && i!=0){
            count++;
        }
    }
}

 

4. count를 리턴한다.

 

return count;

 

결과적으로 코드는 작동한다. 하지만 잘라서 보기에도 복잡한 감이 있다. if문 안에 for문 안에 if문,,,, 근데 그게 심지어 두개?

 

개선 방안

 

1. num1, num2 를 받을 변수를 새로 선언하고 임의로 start, end로 대소를 정한다. 반대의 경우 start, end에 들어갈 값을 바꾸어준다.

 

int start = num1;
int end = num2;

if(num1>num2){
    start = num2;
    end = num1;
}

 

2. 위와 같은 방식으로 for문을 작성한다.

 

for(int i=start; i<=end; i++){
    if(i%2==0){
    	count++;
    }
}

 

이 방법으로 if-for-if 구조로 작성됐던 코드를 한개의 if문과 for-if문으로 나누어 작성할 수 있다. (+작은 수로 0을 입력받는 경우를 위한 예외처리를 작성한다)