Open wooyn730 opened 4 months ago
번호: 9663 사이트: 백준 난이도: 골드4
어쪈지 풀기 싫게 생겼더라.... 다른 풀이 참고해서 풂 ㅠㅠ
완전탐색이 아니라 규칙을 먼저 생각해내는게 포인트였다. 나는 퀸을 조합으로 배치한 후 조건을 체크했는데 퀸을 배치할 때부터 조건을 체크해야 했다 (그냥 ㄴㄴ 효율적으로 ㅇㅇ)
따라서 한 열씩 퀸을 배치해보되, 같은 행에는 퀸을 배치할 수 없으며, 대각선에도 퀸을 배치할 수 없는 사실을 알았어야 하고
퀸의 좌표를 2차원이 아닌 1차원 배열에 저장할 줄 알며, x좌표 차와 y좌표 차가 같을 때 대각선에 위치함 (대각선 배치를 효율적으로 구분할 수 있어야 함)을 알았어야 한다.
알고리즘을 하나씩 정복한다고 했어도 배운 것에 대해, 틀에 갖혀있지 않고 효율적인 방법, 그 안에 있는 규칙을 먼저 떠올리는 연습을 해야한다...
Brute Force 정복
정의
브루트 포스(brute force) brute: 무식한, force: 힘 무식한 힘으로 해석할 수 있다. 완전탐색 알고리즘. 즉, 가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과만을 가져온다. 이 알고리즘의 강력한 점은 예외 없이 100%의 확률로 정답만을 출력한다.
브루트 포스(brute force)란 조합 가능한 모든 경우의 수를 다 대입하는 것이다. 쉽게 말하면 비밀번호가 4자리인 잠금을 풀기 위해 0000부터 9999까지 전부 다 시도해서 때려 맞추는 것과 같다. 이런 걸 언제 다 하나 싶겠지만 컴퓨터는 1초에 엄청나게 많은 연산을 하기 때문에 이런 노가다도 잘 한다. 그래서 실제 보안 공격에도 쓰이는 수법(brute force attack)이기도 하다.
장점 모든 경우를 다 고려하기 때문에 확실한 정답을 찾을 수 있다. 복잡한 알고리즘 없이 빠르게 구현이 가능하다.
단점 모든 경우를 다 고려하기 때문에 효율적이지 못하다. 알고리즘 실행시간이 오래 걸린다.
Brute : 무식한
Force : 힘
직역하면, 무식한 힘을 갖는 알고리즘이란 뜻으로, 완전 탐색 알고리즘의 한 종류이지만 완전 탐색의 또 다른 이름으로 쓰이기도 한다. 브루트 포스 알고리즘은 완전탐색으로 답을 도출하는 알고리즘이며, 대부분은 반복문과 조건문을 통하여 답을 도출한다.
모든 경우의 수를 전부 탐색하기 때문에, 100%의 정확성을 보장하지만,
모든 경우의 수를 전부 탐색하기 때문에, 높은 시간 복잡도를 갖는다.
완전 탐색과 브루트 포스의 이름에서 유추할 수 있듯이 이 알고리즘의 방법은 발생 가능한 모든 경우의 수를 전부 탐색하면서 조건에 맞는 답을 찾아내는 방법입니다. 이 알고리즘의 대표적인 장점은 모두 확인하기 때문에 100%의 확률로 정답만을 출력한다는 것입니다. 하지만 확실하게 확인하는 만큼 시간이 오래 걸리는 탐색기법입니다.
💡 Brute: 무식한, 짐승 같은 + Force: 힘 - 무식하게 풀기
구현 방법
대부분은 반복문과 조건문 / 재귀 / DFS BFS
문제 유형
입력으로 주어지는 데이터(N)의 크기가 매우 작다.
답의 범위가 작고, 임의의 답을 하나 선택했을 때 문제 조건을 만족하는지 역추적할 수 있다.
여러 문제 조건 중 한 조건을 고정시키면 문제 풀이가 간단해진다.
문제에서 달성하고자 하는 솔루션이 잘 정의 되어 있어야한다.
문제를 해결할 수 있는 풀이의 수가 제한되어 있어야 한다.
참고 링크 참고 링크2
다음엔 비트 마스킹, 다이나믹 프로그래밍?
브루트포스, 백트래킹, DFS 차이
브루트 포스 알고리즘 = 모든 가능한 경우를 전부 해보는 방식의 알고리즘 백트래킹 = 탐색을 진행하고 조건에 맞지 않는 부분을 제외하면서 진행하는 방식의 알고리즘 DFS = 트리를 완전 탐색하는 한가지 방법
[백준] 브루트포스 실~골 맞은사람순
[프로그래머스] 완전탐색