inblog logo
|
sxias
    알고리즘

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

    문정준's avatar
    문정준
    Feb 06, 2025
    [알고리즘] 0. 알고리즘이 필요한 이유
    Contents
    BruteForce (무차별 대입 공격)코드 작성결과가우스 연산 (Gauss Sum)코드 작성결과최종 변환 코드결과
    ✅
    보안을 위해 더욱 많은 경우의 수를 제작 : 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
    Contents
    BruteForce (무차별 대입 공격)코드 작성결과가우스 연산 (Gauss Sum)코드 작성결과최종 변환 코드결과

    Sxias ㆍ a32176740@gmail.com

    RSS·Powered by Inblog