본문 바로가기

Algorithm/Brutal Force

(7)
[백트래킹] N-Queen 문제 문제 코드  #include #include #include #include using namespace std;/*Queen 문제- 놓을 수 있는 모든 수에 놓기.abort1) 기본 배열 설정. N*N2) 놓을수 있는 모든 경우의 수 찾기3) 행 기준으로 증가시키면서 놓기4) 놓을 때, 조건에 맞게 놓기 - 조건) 1) 이전 퀸들과 비교시 겹치치 않아야함.abort 2) 열 겹치지 않아야하고, 대각선 겹치지 않아야함.abort5) 행이 N일시, 최종 수 증가*//// @brief 현재 row,col에 놓을 수 있는지 여부 판단./// @param cur_row /// @param cur_col /// @param col /// @return bool isSafe(int cur_row,in..
[백트래킹]N과M 문제(1) 문제   코드#include #include #include #include using namespace std;void dfs(int cnt,int n,int m,vector& is_visited,vector& arr){ if(cnt==m) { for(int i=0;i>n>>m; vector is_visited(n,false); vector arr; dfs(0,n,m,is_visited,arr);}  오답 내용 줄바꿈 출력 기능간 차이점 ( endl vs '\n') 1) endl - endl 은 개행문자 + 출력 버퍼를 즉시 비우는 기능을 포함한다.- 즉, 출력 스트림의 버퍼를 강제로 비운다. - cout은 표준 출력 스트림으로, 내부적으로 버퍼를 사용하여 출력을..
[완전 탐색] 모음 사전 접근 방법 방법 1) 모든 경우에 대하여 탐색해야 하기 때문에 완전탐색을 진행해야한다.완전탐색의 경우 모든 단어의 순서를 알아야 하기 때문에 모든 단어를 만들고 순서대로 정렬해야한다.  1) 재귀 사용- 규칙성을 파악했다면 재귀로 구현 가능하다. 반복 동작 현재 단어에서 기준 단어 "AEIOU"를 하나씩 증가하여 붙힌다. 기저 조건 단어의 수가 5개를 초과하면 return한다. 해당 방법을 통해 단어리스트를 만들고 sort하여 순서대로 정렬해준 이후, 입력된 단어의 순번을 계산하면 된다. 코드#include#include #include using namespace std;void make_string(string c,string ref,vector& buff){ if(c.size()>5) ..
[완전 탐색]카펫 문제 문제 설명Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.제한사항갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다...
[완전탐색] 송전탑 수 확인 문제 송전탑의 개수 n, 그리고 전선 정보 wires가 매개변수로 주어집니다.  전선들 중 하나를 끊어서 송전탑 개수가 가능한 비슷하도록 두 전력망으로 나누었을 때,  두 전력망이 가지고 있는 송전탑 개수의 차이(절대값)를 return 하도록 solution 함수를 완성해주세요. 접근 1) 출력- 두 전력망이 가지고 있는 송전탑 개수의 차이(절대값) 2) 개념화 문제의 해 : 두 전력망이 가지고 있는 송전탑 개수의 차이(절대값) - 모든 경우의수를 확인하여 두개의 트리의 수가 적은 값을 도출해내야함. 1. 트리 연결 확인 2. 연결된 엣지를 하나씩 끊기.  - 연결된 엣지 : wire 배열. 3. 엣지를 끊었을 때 두 서브트리들의 노드 차이 계산  - 각 서브트리들 간 노드의 수 파악법 ? //BFS로 ..
[완전탐색]수포자 문제수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세..
[완전탐색]최소 직사각형 문제 모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해주세요.  접근 방법#1차 1) 출력 정의 - 모든 명함을 수납 할 수 있는 가장 작은 지갑. 2) 문제 정의  - 모든 명함을 정렬 (앞 큰것, 뒤 작은것)으로.  - 해당 명함들의 가로 세로값의 최댓값 찾기. 3) 구현   - 명함 정렬     -> 큰값은 앞으로 작은값은 뒤로.   - 가로의 max값과 세로의 max값으로 지갑 만들기. 코드#include #include #include using namespace std;int solution(vector> sizes) { i..