> 기초/알고리즘

TIL-2024.02.17 - 알고리즘 - 완전 탐색 알고리즘 (Brute Force)

Janku 2024. 2. 17. 20:10

 

------- 완전 탐색 알고리즘 ? 

  • 문제의 가능한 모든 경우의 수를 체계적으로 생성하고 검사하여, 문제의 해답을 찾는 방식입니다.
  • 복잡한 알고리즘을 적용하기 전에 문제 해결의 가능성을 탐색하거나, 문제의 규모가 작을 때 유용하게 사용됩니다.

 

장점:

  • 구현이 비교적 간단하고 직관적입니다.
  • 문제의 해를 반드시 찾을 수 있다는 보장이 있습니다(해가 존재한다면).

 

단점: 

  • 경우의 수가 매우 많을 때, 시간 복잡도가 매우 높아질 수 있습니다. 
  • 효율성이 낮아, 큰 규모의 문제나 시간 제한이 엄격한 문제에는 적합하지 않을 수 있습니다.

 

예제:

 

Q) https://school.programmers.co.kr/learn/courses/30/lessons/86491

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

A)

const solution = (sizes) => {
    //  내가 푼 코드
    let largest = 0;
    const arr = [];
    for (let i = 0; i < sizes.length; i++) {
        largest = largest < sizes[i][0] ? sizes[i][0] : largest < sizes[i][1] ? sizes[i][1] : largest;
        arr.push(Math.min(sizes[i][0], sizes[i][1]));
    }
    return largest * arr.reduce((acc, val) => acc > val ? acc : val, 0);

    //  참조한 코드
    // 각 명함을 [가로, 세로] 형태로 정규화하여 가로가 항상 세로보다 크거나 같도록 조정
    const normalizedSizes = sizes.map(([w, h]) => w >= h ? [w, h] : [h, w]);

    // 정규화된 명함 크기에서 가장 긴 가로와 세로 길이를 찾음
    const maxWidth = Math.max(...normalizedSizes.map(size => size[0]));
    const maxHeight = Math.max(...normalizedSizes.map(size => size[1]));

    // 가장 긴 가로와 세로 길이를 곱하여 지갑의 크기를 계산
    return maxWidth * maxHeight;
};