보안을 위해 더욱 많은 경우의 수를 제작 : BruteForce의 delaying
- 경우의 수가 많아짐에 따라 늘어나는 계산 시간을 줄이기 위한 알고리즘 : 최적화
BruteForce (무차별 대입 공격)
- 모든 경우의 수를 시도하여 값을 찾아내는 공격
코드 작성
package algo;
public class BruteForce {
public static void main(String[] args) {
// O(n) > 0(1) : 가우스 연산으로 해결 가능
int n = 1000000;
int sum = 0;
for (int i = 1; i <= n; i++) { // 1 ~ n까지 전부 합함
sum = sum + i;
}
System.out.println("합 : " + sum);
}
}
1부터 n까지 총 n번 더하는 연산
시간복잡도(Big O) : O(n)
결과

가우스 연산 (Gauss Sum)
- S = n(a + l) / 2
- S : 합계
- n : 항의 개수
- a : 첫 번째 항
- l : 마지막 항
코드 작성
package algo;
public class Gauss {
public static void main(String[] args) {
// 1. 변수 정리 : 항의 개수 n, 첫 번째 항 a, 마지막 항 l
int n = 10;
int a = 1;
int l = n; // 1 ~ n이므로 마지막 항 : n
// 2. 연산 : S = n(a + l) / 2
// 연산이 한 번에 끝남 = 시간 복잡도 : O(1)
int sum = n * (a + l) / 2;
// 3. 출력
System.out.println("합 : " + sum);
}
}
n이 얼마나 늘어나든 식 한번에 계산이 끝남
시간복잡도 : O(1)
결과

최종 변환 코드
package algo;
import java.util.Scanner;
public class Gauss {
public static void main(String[] args) {
// 1. 변수 정리 : 항의 개수 n, 첫 번째 항 a, 마지막 항 l
Scanner sc = new Scanner(System.in);
System.out.print("첫 항을 입력하시오. : ");
int a = sc.nextInt();
System.out.print("마지막 항을 입력하시오. : ");
int l = sc.nextInt();
int n = l - a + 1;
// 2. 연산 : S = n(a + l) / 2
// 연산이 한 번에 끝남 = 시간 복잡도 : O(1)
int sum = n * (a + l) / 2;
// 3. 출력
System.out.println("합 : " + sum);
}
}
결과

BruteForce vs Gauss Sum
Share article