본문 바로가기

프로그래밍/코드분석

continue와 break문의 활용

난 정말 JAVA를 공부한 적이 없다구요(윤성우 저, 오렌지미디어)에서 발췌한 문제(136p 문제 5-6)


쉬운 문제이지만(?) 한 시간 이상 고민한 문제이기 때문에 코드분석란에 넣었다.


자연수 1부터 시작해서 모든 홀수와 3의 배수인 짝수를 더해 나간다. 그리고 그 합이 언제 (몇을 더했을 때) 1000을 넘어서는지, 그리고 1000을 넘어선 값은 얼마가 되는지 계산하여 출력하라. 단, 프로그램 내에서 반복문을 필요로 한다면 반드시 while문을 무한루프로 구성해야 한다.


<내가 생각한 코드>

public class test {

public static void main(String[] args){

int sum=0;

while(true){
for(int num=1; sum<1000; num++){
if(num%2==1 || num%6==0){
sum+=num;

}
}
break;
}
System.out.println(sum);
}
}


[1] 3의 배수인 짝수는 곧 6의 배수이기 때문에 

     6으로 나눴을 때 나머지가 0인 것으로 해석(num%6==0)한 뒤 코드를 작성했다.


[2] 여기서 sum<1000일때까지는 계속 for문을 반복하다가, 1000을 넘으면 break; 에 의해서 while문을 탈출


[3] [2]에 의해서 내가 작성한 코드는 간결하지만 직관적이지 않다. 저자는 아래와 같이 코드를 작성했다.


<책에 실린 코드>

public class test {

public static void main(String[] args){

int sum=0, num=1;

while(true){
if(num%2!=0){
sum+=num;
}else{
if(num%3==0)
sum+=num;
}
if(sum>1000){
System.out.println(num+" 더할 때1000을 넘는다. " );
System.out.println("초과된 값 : " + sum);
break;
}
num++;
}
}
}

[1] 흐름을 잘 따라가보아야 한다. 먼저 무한반복문을 만들어 계속 돌린다 while(true)

    이때 num을 계속 1씩 더해준다.


[2] 만약, 2의 배수면 sum에다가 게속해서 더해준다.


[3] 2의 배수가 아닌 수에서 3으로 나누었을 때 나머지가 0 (즉, 6의 배수라면) sum에다가 더해준다.


[4] 그렇게 반복을 하면서 sum>1000이 되는 순간에 문장을 출력한다.