[알고리즘] 0. 알고리즘이 필요한 이유

문정준's avatar
Feb 06, 2025
[알고리즘] 0. 알고리즘이 필요한 이유
보안을 위해 더욱 많은 경우의 수를 제작 : 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)

결과

notion image
 
 

가우스 연산 (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)

결과

notion image
 

최종 변환 코드

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); } }
 

결과

notion image
 
BruteForce vs Gauss Sum
 
Share article

sxias