일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- connected_component
- 5397
- 13305
- template
- 백준
- Biconnected_Component
- sstream
- c++
- qsort
- Pair
- data_structure
- '0'
- Articulation_Point
- class_template
- 예제
- singly Linked List
- list
- red-black tree
- 자료구조
- deletion
- Heap
- 총정리
- Critical_Path_Analysis
- STL
- sort
- 문법
- function_template
- 알고리즘
- 구현
- Algorithm
- Today
- Total
- Today
- Total
- 방명록
목록전체 글 (85)
어제의 나보다 성장한 오늘의 나
BFS 문제 중 기본 문제이다. BFS , DFS 문제를 찾고 있다면 이 문제를 풀어보는 것을 추천한다. 풀이 ◎ BFS 방식으로 해결 한다. (queue STL을 사용한다.) ◎ 한번 움직일 때마다 현재 몇번 왔는지를 기록한다. (map에 기록해 두었다.) ◎ 경계를 넘지 않고 , 1이면 이동한다. BFS 방식으로 상하좌우 모두 이동 가능한지 확인 해보고 가능 하다면 queue에 저장. queue에 담긴 좌표를 하나씩 꺼내보면서 탐색. queue에서 모두 꺼내고, 비게 되었다면 탐색을 마친다. 반드시 도착 경로가 있기 때문에 , 탐색을 마쳤을 때 이동 횟수가 map[N][M]에 저장 되어 있다. Coding #include #include #include using namespace std; int m..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/UbYov/btrua4f39WD/gXxuW5aj6iy1NNJkNs2541/img.png)
이런 오류는 처음이었다... 매우 당황 스러웠지만 천천히 나의 코드를 살펴 보았다. 아니나다를까 cout
풀이 : 알고리즘만 잘 세우면 손 쉽게 해결할 수 있는 문제이다. 먼저 입력 받은 문자열을 자릿수에 따라 나누어서 map에 저장해둔다. 만약 AECDF 를 입력 받았다면 map에 (A,10000) , (E,1000) , (C,100) (D,10) (F,1) 저장해둔다. 그렇게 모든 문자열들을 저장한다. 만약 중복된 값이 나왔다면 더해서 저장한다. AAC 이런 문자열이 나왔다면 (A, 100) 을저장한 뒤 (A, 10)을 더해서 저장한다. 즉, (A,110)을 저장한다. 모든 입력이 끝나고 각 문자마다 second(map의 second 값) 값이 잘 정리되어 있다. (각각의 second 값) * (1~9 사이 값 지정) 들의 전체 합 이 가장 큰 수가 되야 하므로, second값을 따로 vector에 저장..
오늘은 c++에서 변수의 타입을 변경해야 할 때 사용하는 함수 및 방법을 정리해봤다. Ps에서 정말 많이 사용 되기 때문에 반드시 알고 있어야 한다. 1) int -> char 변환 ◎ '0' or 48을 더해준다. int before = 3; char after = before + '0'; // int -> char 변환. char after = before + 48; // 이렇게 써도 결과가 같다. 2) char -> int 변환 ◎ '0' 이나 48을 빼준다. char before = '3'; int after = before - '0'; // char -> int int after = before - 48; // 대체 가능 1) 2) 가 가능한 이유 '0' 이 아스키 코드 48 이다. 그리고 '1..
풀이 : 30의 배수이려면 3의 배수이면서 동시에 10의 배수이면 된다. 3의 배수는 각 자리 숫자의 합이 3의 배수이면 된다. 예를 들어 126 같은 경우 각 자리 숫자의 합은 1+2+6 = 9 이다. 9는 3의 배수이다. 그러면 126은 3의 배수이다. 10의 배수는 마지막에 0이 붙으면 된다. 이 두가지 조건을 만족하면 30의 배수라고 할 수 있다. 각 자리의 숫자의 합이 3의 배수인지 , 숫자열 속 0이 존재하는 지를 확인 한 뒤 두 조건을 모두 충족한다면 내림 차순 정렬 후 출력해주면 된다. Coding #include #include #include using namespace std; int main(int args , char** argv){ vector nums; // 각 자리 숫자 저장..
※ 문제의 S를 N으로 두고 풀었기 때문에 헷갈리지 않게 조심해주세요. 풀이 : 단순한 그리디 문제이다. 가장 많은 숫자를 더해서 N을 완성 시켜야 하므로, 작은 수부터 차례로 1,2,3,4,.....,k 까지 쭈욱 더한다. 1~k까지 더한 값을 N에서 뺐을 때 0보다 크고 N보다 같거나 작은 수가 나온다면 정답은 k이다. 예를 들어보자. 100 = (1+2+.....+13) + 9 . 9는 1~N 사이 값이므로 정답은 13이다. 좀 더 자세히 설명 해보자면 9는 이미 1~13 안에 들어있기 때문에 이렇게 바꿔줘야 한다. 100 = (1+2+.....12) + (13+9) = (1+2+.....12) + 22 따라서 갯수(k)는 13이다. Coding #include using namespace std;..
STL container 중 하나인 트리 중 Complete Binary Tree (완전 이진 트리)를 구현해보았다. 그리고 응용 함수들을 만들어 보았다. 구현 Struct struct TreeNode{ int key; // node 속 data 저장 TreeNode* left; TreeNode* right; TreeNode(int k, TreeNode* l , TreeNode* r){ key = k; left = l; right = r; } TreeNode(int k) : key(k), left(nullptr), right(nullptr){} ~TreeNode(){} }; using tree = TreeNode*; 기본 함수들 empty : 비어있다면 true 반환 , 아니면 false 반환. bool..
간단한 Greedy 문제이다. 정렬 후, for 반복으로 arr[i] * (arr_size()-i) 를 다 더해주면 답이 나온다. #include #include #include using namespace std; int main(int args ,char** argv){ int N; cin >> N; vector pi; int temp; for(int i = 0 ; i > temp; pi.push_back(temp); } sort(pi.begin() , pi.end()); int pi_size = pi.size(); int answer = 0 ; for(int i = 0 ; i < N ; ++i){ answer += pi[i] * (pi_size-i); } cout