java로 순열 덧셈

canyi·2023년 6월 15일
0

java m1

목록 보기
13/40

문제

1 + (1+2) + (1+2+3) + (1+2+3+4) .... (1+2+3+4+5+6+7+8+9+10) 의 합을 반복문으로 풀기

public class Main {
    public static void main(String[] args) {
        int sum = 0;
        int n = 10; // 최대 숫자
        int num = 1; // 시작 숫자
        for (int i = 1; i <= n; i++) {
            int tempSum = 0;
            for (int j = 1; j <= i; j++) {
                tempSum += num;
                num++;
            }
            sum += tempSum;
        }
        System.out.println(sum);
    }
}

다만 결과가 1540으로 출력됨

해당 문제를 해결하기 위해서는 각 항의 합을 계산할 때에는 연속된 숫자를 사용해야 함. 하지만 변수 num을 증가시키면서 그 값을 사용하게 되면, 이전의 합과 다른 값을 사용하게 됨.

올바른 결과를 얻기 위해서는 num 변수를 사용하지 않고, j 변수를 사용하여 연속된 숫자를 더해야 함. 수정된 코드에서는 tempSum += j;를 사용하여 숫자를 누적하고 있음. 이렇게 수정하면 1부터 연속된 숫자를 더해가며 올바른 합을 얻을 수 있음.

수정후 (2중 for문)

num++;  제거 
public class Main {
    public static void main(String[] args) {
        int sum = 0;
        int n = 10; // 최대 숫자
        for (int i = 1; i <= n; i++) {
            int tempSum = 0;
            for (int j = 1; j <= i; j++) {
                tempSum += j;
            }
            sum += tempSum;
        }
        System.out.println(sum);
    }
}

수정2 (for문 누적합)

public class Main {
    public static void main(String[] args) {
        int sum = 0;
        int n = 10; // 최대 숫자
        int tempSum = 0;
        for (int i = 1; i <= n; i++) {
            tempSum += i;
            sum += tempSum;
        }
        System.out.println(sum);
    }
}

중간값 출력

public static void main(String[] args) {

        int sum = 0;
        int n = 10; // 최대 숫자
        int tempSum = 0;
        for (int i = 1; i <= n; i++) {
            tempSum += i;
            sum += tempSum;
            System.out.println("tempSum:"+tempSum);
            System.out.println("sum:"+sum);
            System.out.println();
        }
        System.out.println("최종값:" + sum);
    }

profile
백엔드 개발 정리

0개의 댓글