목록PROGRAMMING (318)
MY MEMO
1. 십진수 0에 해당하는 이진수 0을 첫 번째 학생이 말한다. 2. 십진수 1에 해당하는 이진수 1을 두 번째 학생이 말한다. 3. 십진수 2에 해당하는 이진수 10 중 첫 번째 비트 1을 세 번째 학생이 말한다. 4. 십진수 2에 해당하는 이진수 10 중 두 번째 비트 0을 네 번째 학생이 말한다. ... 첫 번째 줄에는 테스트케이스의 수 두 번째 줄에는 몇 번째 차례인지를 나타내는 수 #include #include #include #include using namespace std; vectorbitgame; int sum(int num) { return num*pow(2, num) - pow(2, num) + 1; } void decimal_to_binary(int num) { bitgame.c..
pancake1과 달리 집게가 없으므로 주걱만 이용해야한다. 1. pancake의 크기를 모두 입력받고 오름차순으로 sorting해 right_order vector에 저장한다. 2. right_order의 마지막과 pancake의 마지막을 비교한다. 3. 만약 같지 않으면 3-1 pancake에서 같지 않은 수(임의로 x라 한다) x를 찾는다 3-2 만약 x가 첫번째에 있다면 x가 들어가야할 자리부터 처음까지 뒤집는다. 3-3 만약 x가 첫번째에 있지 않다면 x를 첫 번째로 가도록 뒤집은 다음 3-1을 진행한다. (이 경우에는 count를 2번 진행한다.) 4. right_order와 pancake이 모두 같다면 while문을 빠져나온다. #include #include #include #include..
가장 큰 pancake을 아래로 위로 갈수록 작은 pancake으로 쌓는 문제대신 위 아래의 두개의 pancake만을 바꿀 수 있다. (집게를 사용한다고 문제에서 제시)순서를 바꾸는 작 업이 몇 번 필요한지 출력 1. 첫 번째 줄에 테스트케이스 개수 2. 두 번째 줄에는 첫 번째 테스트케이스에 대해 팬케익으로 구성된 더미의 정보가 주어 진다. 맨 앞에는 더미에 쌓인 팬케익의 숫자가 나오고, 이후 빈칸을 사이에 두고 팬 케익의 지름을 나타내는 양의 정수가 주어진다. 더미의 맨 아래부 터 맨 위쪽 순으로 나열된다. 팬케익의 개수는 최대 300개를 넘지 않는다. #include #include #include #include #include #include using namespace std; vector p..
ALGOSPOT RATIO : https://algospot.com/judge/problem/read/RATIO 알고리즘 책의 수치해석 부분에 있는 문제이다1%를 올리기 위한 최소로 이긴 게임의 수를 구해야한다 1. Rear와 Front를 이용하여 중간값을 구한다2.새로운 승률 - 원래 승률 >1 이면 =>조금 더 적은 경기를 이겨야 한다 따라서 Rear = Middle 새로운 승률 - 원래 승률 ==0 이면 =>더 많은 경기를 이겨야 한다 따라서 Front = Middle 3. Rear의 값이 Front보다 1더 많다면 최소로 이겨야하는 게임의 수가 도출된다4. 이 때 Front는 1%가 오르기 전의 최대 이긴 게임의 수 이고 Rear는 1%가 오른 최소 이긴 게임의 수이다 예외 ) 최대로 이길수 있는..
ALGOSPOT ROUTING : http://www.playsw.or.kr/repo/cast/105 최단 경로 알고리즘 (다익스트라 알고리즘 Dijkstra Algorithm)을 이용 최단 경로 알고리즘 개념 참고 : http://www.playsw.or.kr/repo/cast/105 visit라는 vector를 정의하여 목적지 노드로 갈 수 있는 최소의 거리를 저장한다.visit의 초기값은 무한대이므로 double의 최대인 DBL_MAX로 초기화한다. 1. 시작할 땐 noise에 있는 distance 값을 1.0으로 초기화 한다. -> 곱해야 자기 자신이 나올 수 있도록 여기서 distance는 현재까지 이동한 값이다. 이 값에 간선의 가중치를 곱하여 visit의 값과 비교한다 시작하는 index는 ..
DFS : 깊이 우선 탐색 참고 : http://blog.eairship.kr/268 BFS : 너비 우선 탐색 참고 : http://blog.eairship.kr/269 DFS CODE - stl없이 구현 #pragma once #include using namespace std; #define NODE_COUNT 10 #define ABLE 1 #define INABLE -1 #define VISITED 1 #define DIDNT_VISIT -1 typedef struct Graph { int num; int Child[NODE_COUNT]; }; Graph*DFS_Graph = new Graph[NODE_COUNT]; int Visit[NODE_COUNT]; void Initialize() { f..
ALGOSPOT TRAVERSAL : https://algospot.com/judge/problem/read/TRAVERSAL 전위 순회, 중위 순회, 후위 순회의 개념참고 : https://algospot.com/judge/problem/read/TRAVERSAL 전위 순회는 루트->왼쪽->오른쪽중위 순회는 왼쪽->루트->오른쪽 즉 루트가 나오는 순서에 따라 전위 중위 후위로 나눈다.이를 이용하면 후위순회를 찾을 수 있다. 1. 전위 순회의 값을 이용하여 루트를 알수있다2. 알아낸 루트값을 이용하여 입력받은 중위 순회의 배열을 왼쪽 트리의 값과 오른쪽 트리의 값으로 나눌 수 있다.3. 위의 과정을 반복하여 왼쪽트리를 끝까지 탐색한다4. 이후 올라가면서 오른쪽 트리가 존재하면 탐색한다 #include #..
ALGOSPOT LAN : https://algospot.com/judge/problem/read/LAN 최소 신장 트리(Minimum Spanning Tree)를 이용하는 문제 1. Kruskal algorithm 1.1 간선의 가중치를 작은 순으로 나열 1.2 나열한 간선 순서대로 연결해 본후 cycle이 생기면 연결하지 않음 1.3 위의 과정 반복 2. Prim algorithm 참고 : http://www.playsw.or.kr/repo/cast/106참고 : http://blog.naver.com/PostView.nhn?blogId=cky5122&logNo=80174535762&parentCategoryNo=162&categoryNo=206&viewDate=&isShowPopularPosts=f..