일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 정석학술정보관
- Operating System
- 개발
- c++
- 그래프
- 구현
- 북리뷰
- 스택
- 코딩
- 오퍼레이팅시스템
- 코테
- 문제풀이
- 브루트포스
- vector
- 컴퓨터공학과
- coding
- 너비우선탐색
- 자료구조
- DP
- 오에스
- Stack
- 컴공과
- 정석
- Computer science
- cs
- OS
- 컴공
- bfs
- 알고리즘
- 백준
- Today
- Total
목록브루트포스 (10)
Little Jay
파티션을 활용한 브루트포스 문제 #include #define endl '\n' using namespace std; int n; int arr[11]; int calc(int start, int end) { int x = 1; for (int i = start; i > n; for (int i = 1; i > arr[i]; } int temp, ans = 0; for (int i = 1; i < n; i++) { for (int j = i + 1; j < n; j++) { for (int k = j + 1; k < n; k++) { temp = calc(1, i) + calc(i + 1, j) + calc(j + 1, k) + calc(k + 1, n); ans = max(ans, temp); } } ..
진법 계산을 요구하는 Brute Force 문제 #include #define endl '\n' using namespace std; const int numbers[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; bool check(int dec, int hex, int doz) { return (dec == hex && hex == doz); } int dozen_calc(int n) { int doz_num = 0; int temp = n; while (temp) { doz_num += numbers[temp % 12]; temp /= 12; } return doz_num; } int hex_calc(int n) { int hex_num..
생각보다 엄청 더러웠던(?) 문제였다. 역시 브루트포스는 항상 그렇고 그렇다...... CCTV 구조체를 하나 만들어서 CCTV 종류(몇번인지), 몇열, 몇행에 저장되어있는지에 대한 정보를 저장하고 rotation이라는 정수 배열에서 회전 가능한 범위를 넣어주었다. 디버깅을 하면 이제 input 하고 dfs로 탐색이 들어가는데, 이제 중요한점은 백트랙킹을 해야한다는 것이다. 이 문제의 핵심인 부분이다. 예를 들어서 01000 00000 00000 00000 00000 이런 cctv가 있으면, 얘는 아래쪽으로 탐색을 해야 하는 것이다 그래서 이 부분에 대해서 각각의 경우에 대해서 백트랙킹을 해주면 된다. #include #define MAX 8 using namespace std; struct CCTV {..
팰린드롬 문제이다 이 팰린드롬 문제때문에 전공 하나 B0받은 것을 생각하면 치가 떨리는 알고리즘(?)이다. 각설하고, 에라토스테네스의 체로 소수인 숫자들을 vector에 미리 넣어놓고 vector의 숫자보다 같거나 큰 소수들을 탐색하면서 팰린드롬인지 확인해주면 된다 숫자가 커서 vector로 문제를 풀 때 메모리가 많이 소모될 줄 알았는데 다행히 6720kb밖에 소모되지 않았다. #include #include #include #include using namespace std; #define MAX 1003001 int arr[1003002]; vector v; //에라토스테네스의 체 void prime() { for (int i = 2; i = n) { check = true; string s = t..
브루트포스 문제 for 문을 돌면서 자신보다 큰 값이 있으면 rank를 하나씩 올려주면 된다. #include #include #include using namespace std; pair arr[50]; int main() { int n, rank = 1; cin >> n; for (int i = 0; i > arr[i].first >> arr[i].second; } for (int i = 0; i < n; i++) { for (int k = 0; k < n; k++) { if (arr[i].first < arr[k].first && arr[i].second < arr[k].second) { rank += 1; } } cout
greedy하게 풀었다 이게 greedy하게 푸는 방법이라 내가 쓴 코드가 정답이 아닐 수도 있다 다른 블로그들 참고하니까 dq로 푸는 방법도 있는 것 같은데 아직은 dq를 모르므로 pass #include #include using namespace std; int main() { int n; cin >> n; int bags = 0; while (n >= 0) { if (n % 5 == 0) { bags += (n / 5); cout
왜인지는 모르겠지만 이걸 푸는데 좀 오래 걸렸다 종말의 숫자란 666 1666 2666 3666 4666 5666 6660 6661 6662 .... 7666 이렇게 666이 연속으로 들어가 있는 숫자를 말한다 문제 자체도 Brute Force 알고리즘으로서 처음 시작인 666부터 올라가야 한다 여기에 대해서 패턴이 없으므로 1을 더해주면서 값을 찾아야 한다 string의 to_string이랑 find 기능을 쓰면 생각보다 편한 문제 #include #include using namespace std; int main() { int n; int count = 0, end_num = 666; cin >> n; string s; while (true) { s = to_string(end_num); if (s..
보호되어 있는 글입니다.
Brute Force 알고리즘 문제 처음에 문제 이해 못해서 엄청 고생했지만 결국 분해합의 생성자는 입력된 값 보다 작다는거를 명심하고 풀기 #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int num, sum, temp; cin >> num; for (int i = 1; i < num; ++i) { sum = i; temp = i; while (temp) { sum += temp % 10; temp /= 10; } if (num == sum) { cout
Brute Force 문제 항상 Brute Force 문제를 풀 때는 제어문과 내가 중간에 뭘 찾고자 하는지 잘 생각하면서 풀어야한다. 이 문제는 비교하는 대상이 작아서 다행이지만, 이 숫자가 엄청 커져버리면 항상 주의를 해야한다. #include #include using namespace std; char arr[51][51]; char white[8][8] = { 'W','B','W','B','W','B','W','B', 'B','W','B','W','B','W','B','W', 'W','B','W','B','W','B','W','B', 'B','W','B','W','B','W','B','W', 'W','B','W','B','W','B','W','B', 'B','W','B','W','B','W','..