━━━━ ◇ ━━━━
Java/Java 공부

Java 누적합계가 100을 넘지 않는 가장 큰 수 찾기

while 문을 사용하여서 누적 합계가 100을 넘지 않는 가장 큰 수를 찾아 보도록 하자.


먼저 이 예제의 핵심은 while 문의 조건식을 어떻게 짜는가에 있어.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package example;
 
/* 1부터 몇까지 더하면 누적합계가 100을 넘지 않는 제일 큰 수가 되는 지를 알아내는 예제*/
public class FlowEx26 {
 
    public static void main(String[] args) {
                
        int sum = 0;
        int i = 1;
        while(sum <= 100){
            sum += i;
            System.out.println(i +" => "+ sum);
            i++;
            
        }
        
 
    }
 
}
cs


위 코드는 내가 처음에 짰던 코드야. 별 생각 없이 sum 에 i를 누적시키고, sum을 출력하고, i를 증가시키면 될것이라고 생각했지. 조건식은 누적합계가 100 이하라면 반복, 100을 넘어서면 스톱. 그 결과는 어땠을까?



내 생각과는 달리 i = 14, sum = 105가 찍혔어. 다시 곰곰히 생각해보니, i 가 13일때 sum에 누적이 되고(91), 콘솔에 그 것들을 출력을 하고, i를 증가시켜 (i++, i = 14) 이 상태에서 sum 이 100보다 작은지 조건식을 판별하는데, sum은 91 이기 때문에 true 가 반환되더라고. 그래서 누적이 한번 더 되는 것이었지.


이 문제를 해결하기 위해서는 조건식에 sum이 누적된 결과가 반영되어야 한다는 것이었어. 그래서 i를 sum에 누적하는 코드를 조건식 안에 집어 넣어봤어.


1
2
3
4
5
6
int sum = 0;
int i = 0;
while((sum += i) <= 100){
    System.out.println(i +" => "+ sum);
    i++;
}
cs

이런식으로 말야. 누적을 먼저 계산하고 그 결과 값이 100보다 작은지 비교하는 방식으로 바꾼거야. 

이번에는 어떤 결과가 나왔을까?


짠! 13에 91! 정상적으로 잘 나왔...??? 자세히 보니 제일 위에 쓸데 없는 값이 하나 붙어 있네?


가장 처음 반복할때 0 값이 들어갔기 때문이야. 이 문제를 해결하기 위해서 i를 sum에 더하기 전에 먼저 증감 시켜줄 필요가 있었어.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package example;
 
/* 1부터 몇까지 더하면 누적합계가 100을 넘지 않는 제일 큰 수가 되는 지를 알아내는 예제*/
public class FlowEx26 {
 
    public static void main(String[] args) {
                
        /*int sum = 0;
        int i = 1;
        while(sum <= 100){
            sum += i;
            System.out.println(i +" => "+ sum);
            i++;
            
        }*/
        
        /*int sum = 0;
        int i = 0;
        while((sum += i) <= 100){
            System.out.println(i +" => "+ sum);
            i++;
            
        }*/
        
        int sum1 = 0;
        int i1 = 0;
        while((sum1 += ++i1) <= 100){
            System.out.println(i1 +" => "+ sum1);
            
        }
        
        int sum2 = 0;
        int i2 = 1;
        while((sum2 += i2) <= 100){
            System.out.println(i2 +" => "+ sum2);
            i2++;
        }
 
    }
 
}
 
 
 
cs

 둘 중 어떤 방법이어도 좋아. 전치수식을 사용해서 값을 누적 시키든지, 초기화 시키는 값을 바꾸어 주든지 그 결과는...



하핫! 이제 정상적으로 작동 되는군!


자잘한 버그를 잡는다고 몇번 수정을 했는데, 사실 우리가 처음에 구하고자 했던, 누적합계가 100을 넘지 않는 가장 큰 수는 13 !! 이라고 결론을 내며 이만 포스트를 종료하겠어. 바이바이~ 

COMMENT