일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 중반부
- BaekJoon
- 삼성 #코테 #2020상반기 #c++
- 투포인터
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- Smilegate
- 백준
- LIS #Algorithm #요소추적
- 소감
- 서버개발캠프
- 스마일게이트
- 1편
- Union-find
- 카카오
- 보석쇼핑
- 코딩테스트
- 카카오인턴
- c++
- 알고리즘
- BFS
- 식단
- Algorithm
- 코테
- 유니온파인드
- Today
- Total
목록Algorithm/Baekjoon (70)
짱아의 개발 기록장
dist배열에 8개 원소를 넣었다. 0~3 => 오른쪽으로 1, -1, a, b 4~5 => 왼쪽으로 a, b 6~7 => 힘 모아서 오른쪽으로 a, b배 이후에는, bfs로 최단 경로를 찾아주었다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 #include #include #include using namespace std; int a, b, n, m; bool visited[100001] = {false, };..
전형적인 백트래킹 문제여서 간단하게 코테 보기 전에 연습하기 좋은 문제인 것 같다. 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 32 33 34 35 36 37 38 39 // n과m (7) #include #include #include using namespace std; int n, m; vector v; vector ans; void choose(int num) { if(num==m){ for(int i=0; i
플로이드 와샬로도 충분히 풀 수 있는 문제지만,,, 그냥 다익스트라를 n번 돌리는 방식으로 구현했다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 // 서강그라운드 #include #include #include #include using namespace std; int n, m, r, a, b, c; int item[102] = {0, }; vector v[102]; int ..
R연산을 할 때 그냥 reverse를 써서 구현하다가... 시간초과가 났다. 시간초과나는 것이 당연한게 최악의 경우를 생각해보면, n이 10만개+ R연산이 10만개 => 10만*10만이 되어서 터진다... 그래서 투포인터로 구현해야한다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 9..
문자열처리문제였다. 단순히, 문제에 나와있는 고려사항들을 다 처리해주면 쉽게 구할 수 있다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 // 단어 뒤집기 2 #include #include using namespace std; string s; int main() { getline(cin, s); string ans = ""; string tmp = ""; bool check = false; for(int i=0; i0){ reverse(tmp.begin(), tmp.end()); ans += tmp; tmp = ..
너무 전형적인 유니온 파인드 문제이다. 바로 사이클이 형성되는 순간 exit(0)해서 프로그램을 빠져나오도록 구현했다. 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 32 33 34 35 36 // 사이클게임 #include using namespace std; int n, m, a, b; int connect[500001] = {0, }; int find(int a){ if(a==connect[a]){ return a; } return connect[a] = find(connect[a]); } int main() { cin>>n>>m; for(int i=0; ia>>b; int from = find(..
트리를 DFS와 DP를 활용해서 푸는 문제이다. 트리를 DFS로 구현하되, 시간 절약을 위해서 DP를 사용한 형태이다. 가장 핵심 아이디어는, 내가 얼리어답터이면 -> 자식이 얼리어답터이던 아니던 상관없다. 내가 얼리어답터가 아니면 -> 자식은 반드시! 얼리어답터이어야 한다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364// SNS#include #include #include using namespace std; const int MAX = 1000001;int n, u, v;vector connect[MAX]; // 친구 관계vecto..
가장 최소의 수를 구하는 그리디 문제였다. dp를 사용해서 푸는 방법도 있지만, 직관적으로 판단한다면 더 쉽게 풀 수 있다. 5로 나누어떨어지지 않는다면, 2를 계속 빼는 식으로 계산했다. 최종적으로, 5로 나누어 떨어지지 않아서 while문을 빠져 나왔다면 1) 2로 나누어떨어지는 경우이거나, 2) 아예 2와 5로 떨어지지 않는 수이다. ex) 3, 1... 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 // 거스름돈 #include #include using namespace std; int n; vector v; int dp[100001] = {0, }; int main() { cin>>n; int c..