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

백하림's avatar
Feb 06, 2025
[Java] 26. 알고리즘이 필요한 이유

1. 전체 탐색

  • BruteForce (무작정 더하기(for문을 돌며) ) BruteForce란? 조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 암호를 해독하는 방법 (무식)
package algo; public class BruteForce { public static void main(String[] args) { // O(n) 시간 복잡도 int n = 1000000; int sum = 0; for (int i = 1; i <= n; i++) { // 모든 숫자를 더함. sum = sum + i; // 누적 식 } System.out.println("합 : " + sum); } }
notion image

2. 가우스 연산

  • sum : 총합
  • n : 항의 개수 (10개)
  • a : 첫 번째 항 (1)
  • l : 마지막 항 (10)
notion image
package algo; public class Gauss { public static void main(String[] args) { //가우스 연산 - 공식 sum = n * (a+l) / 2 // 1. 총값 저장 int sum = 0; // 2. n값 저장(항의 개수) int n = 10; // 3. a값 저장(첫번째 항) int a = 1; // 4. l값 저장(마지막 항) int l = 10; // 5. 가우스 연산 sum = (n * (a + l)) / 2; // 6. 총값 출력 System.out.println("합계 : " + sum); } }
notion image

🔍 BruteForce vs 가우스 소거법 (Gaussian Elimination) 🤖

항목
BruteForce (완전 탐색) 🧠
가우스 소거법 (Gaussian Elimination) 📊
알고리즘 설명
가능한 모든 해를 탐색하여 답을 찾는 방법 🔎
선형 방정식을 풀기 위한 연립방정식의 가우스 소거법 사용 🔢
시간 복잡도
O(n!)O(n!)O(n!) 또는 O(2n)O(2^n)O(2n), 문제에 따라 다름 ⏳
O(n3)O(n^3)O(n3), 연립방정식의 차원에 비례 📈
공간 복잡도
매우 높은 공간 복잡도를 가질 수 있음 🧳
상대적으로 적은 공간 복잡도를 가짐 📦
정확성
정확한 해를 찾지만 계산 비용이 매우 높음 ⚖️
정확한 해를 제공 ✅
적합한 문제 유형
해의 탐색을 반복적으로 해야 하는 문제에 적합 🧩
선형 방정식이 주어졌을 때, 특히 행렬이 주어졌을 때 적합 🏗️
장점
- 모든 가능한 해를 탐색하여 정확한 결과를 얻을 수 있음 🌟
- 비교적 효율적으로 선형 방정식을 풀 수 있음 ⚙️
단점
- 시간과 공간의 제약으로 인해 큰 문제에서는 매우 비효율적 😓
- 계산이 복잡하고, 대형 행렬을 다룰 때 수치적으로 불안정할 수 있음 ⚠️
상황에 따른 선택
작은 문제에서 정확한 해를 찾을 때 유리 📏
중대형 크기의 선형 방정식을 풀 때 더 효율적 🔧
Share article

harimmon