본문 바로가기

브루트포스6

[Algorithm] 백준 14620 꽃길 | 파이썬 (브루트포스) ※ 14620 꽃길https://www.acmicpc.net/problem/14620 문제 해결 TIP메인 로직은 backtrack안의 for문이다. 우선 첫번째 꽃을 심는다. 이후 두번째 꽃은 가능한 모든 위치에 심으면서 최소 비용이 나오는지 확인한다. 세번째 꽃도 가능한 모든 위치에 심으면서 최소 비용이 나오는지 확인한다. 이후, 꽃을 다시 뽑고, 첫 번째 꽃은 다른 위치에 심고 다시 반복 진행한다. 전체 코드N = int(input())money_graph = [list(map(int, input().split())) for _ in range(N)]visited = [[False] * N for _ in range(N)]dx = [0, 0, 1, -1]dy = [1, -1, 0, 0]# 꽃을 심을.. 2024. 9. 21.
[Algorithm] 백준 2309 일곱 난쟁이 | 파이썬 ※ 2309 일곱 난쟁이https://www.acmicpc.net/problem/2309 문제 해결 TIP반대로 생각했을 때 9개의 난쟁이 키를 모두 합한 후, 2명의 난쟁이 키를 빼준 것이 100일 때를 출력하면 된다.  전체 코드result = []for i in range(9): height = int(input()) result.append(height)result.sort()sum = sum(result)answer = sumfound = Falsewhile True: for i in range(8): for j in range(i+1, 9): answer -= result[i] answer -= result[j] .. 2024. 8. 9.
[Algorithm] 백준 1436 영화감독 숌 | 파이썬 ※ 1436 영화감독 숌https://www.acmicpc.net/problem/1436 문제 해결 TIP5666 다음으로 큰 종말의 수는 6660이다. 가장 작은 종말의 수인 666에서 1씩 증가시키며, count를 쌓아가면 된다. (효율을 따지려고 어렵게 생각하지 말고 컴퓨터는 빠르게 계산할 수 있다는 것을 항상 잊지말것...) 전체 코드N = int(input())answer = 666count = 0while True: if '666' in str(answer): count += 1 if count == N: break answer += 1print(answer) 2024. 8. 7.
[Algorithm] 백준 1018 체스판 다시 칠하기 | 파이썬 ※ 1018 체스판 다시 칠하기https://www.acmicpc.net/problem/1018 문제 해결 TIP입력으로 주어진 맵(그래프)에서 8x8 크기로 자른 후, 가능한 두 가지 맵(그래프)과 비교하는 문제이다. 가능한 두 가지 그래프는 다음과 같다. 두 그래프와 동시에 비교해가며, 첫번째 그림과 다를 경우 count_1에 1씩 추가, 두번째 그림과 다를 경우 count_2에 1씩을 추가해준다. 이후 최값을 출력한다. 전체 코드N, M = map(int,input().split())graph = []answer = []for i in range(N): graph.append(list(map(str,input())))for i in range(N-7): for j in range(M-7).. 2024. 8. 2.
[Algorithm] Brute Force(브루트 포스) 브루트 포스란? 조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 암호를 해독하는 방법이다. 완전 탐색이라고도 한다. 예를 들어, 4자리 비밀번호 자물쇠가 있을 때 0000~9999까지 모든 수를 대입해서 푸는 것을 말한다. 브루트 포스의 특징 이론적으로 가능한 모든 경우의 수를 다 검색해 보는 것이라 정확도 100%를 보장한다. 거의 완벽하게 병렬 작업이 가능하다. 문제의 복잡도에 매우 민감하여 조금만 복잡해져도 매우 비효율적이다. 브루트 포스의 종류 선형 구조 : 순차 탐색 비선형 구조 : 백트래킹, BFS, DFS 브루트 포스 구현 방법 for/while loop 사용 순열 재귀 2024. 1. 5.
[Algorithm] 브루트 포스 백준 2798번 블랙잭, 2231번 분해합 | C++ ※ 2798 블랙잭 https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net #include using namespace std; int main() { int N, M, a[100]; //N: 카드의 개수, a: 카드의 숫자를 저장하는 일차원 배열 int sum = 0, near = 0; //입력 cin >> N >> M; for (int i = 0; i > a[i]; //카드의 숫자 입력.. 2022. 5. 13.