일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 1편
- 식단
- 소감
- 알고리즘
- BaekJoon
- 코딩테스트
- 보석쇼핑
- 백준
- 서버개발캠프
- Algorithm
- LIS #Algorithm #요소추적
- 투포인터
- BFS
- 중반부
- Smilegate
- 카카오
- 유니온파인드
- Union-find
- 카카오인턴
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- c++
- 코테
- 스마일게이트
- 삼성 #코테 #2020상반기 #c++
- Today
- Total
목록Algorithm (178)
짱아의 개발 기록장
오우.. 이런 ListNode로 푸는 문제가 c++로는 익숙하지 않아서 힘들었다. 말 그대로 연결리스트의 특성을 잘 살려서 구현하면 된다! [메인 로직] 각 노드의 값을 합하고 나머지는 dummy노드에 넣어주고 몫은 다음으로 넘겨준다. ListNode만 익숙하다면, 계산하는 과정을 그닥 어렵지 않다. 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 class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { bool check = false; ListNode* dummy = new ListNode(); ListNo..
LeetCode에서 전에 이런 문제를 풀었던 기억이?... Merge Sort을 할때에 두 개로 나눈 배열을 합병하는 과정을 그대로 구현하면 된다. 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 class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { // int idx = 0; ListNode* dummy = new ListNode(); ListNode* curr = dummy; if(l1==NULL || l2==NULL){ if(l1==NULL){..
String을 다루는 문제였다. [메인 로직] map을 사용하여 각각의 문자열을 정렬한 결과와 같은 문자열들을 하나의 vector에 넣어 분류해주었다. aet -> ["eat", "tea", "ate"] ant -> ["tan", "nat"] ... 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 class Solution { public: map m; vector ans; vector groupAnagrams(vector& strs) { ans.resize(strs.size()); int idx = 0; for(int i=0; i
Stack을 사용하여 유효한 여부를 판단하기만 하면 된다. [메인 로직] 닫는 괄호가 나오면, Stack의 top에 같은 종류의 여는 괄호가 나오지 않으면 invalid하다. 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 class Solution { public: stack S; bool check = true; bool isValid(string s) { for(int i=0; i
전형적인 조합 문제!!! 기본적인 조합의 코드를 익히지 좋은 문제이다. 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 class Solution { public: vector ans; int N; void dfs(int open, int close, string s){ if(open==N){ for(int i=0; i0){ dfs(open, close-1, s+')'); } } vector generateParenthesis(int n) { N = n; dfs(0, 0, ""); return ans; } }; Colored by Color Scripter cs
전형적인 순열을 사용하는 문제이지만, 중요한 점은 중복된 숫자가 있는 것이다! 따라서, 중복되는 결과를 만들어내지 않기 위한 조치가 필요하다. 1. 순열을 만들어내고 마지막에 ans에 있는 벡터들을 탐색하며 같은 배열이 없는 지 확인 시간 매우 많이 소요....(당연한 것,,) faster than 5.08%인가??ㅋㅋㅋ 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 class Solution { public: int n; vector v; int visited[10] = {0, }; vector ans; ..
backtracking을 연습하기에 매우 좋은, 지저분하지 않고 간단 명료한 문제! ()와 같은 열고 닫는 괄호를 통해 굉장히 많은 문제가 출제될 수 있는데, 대표적인 것이 이 문제와 같이 열고닫는 괄호(올바른 괄호)의 조합을 찾는 문제, 올바른 괄호인지 아닌 지의 여부를 묻는 문제, 괄호의 쌍을 묻는 문제 등등.... [메인 로직] open, close와 같은 변수로 현재 문자열에 몇개의 여는 괄호와 닫는 괄호가 있는 지 표시해주었고 open
정말 Greedy에 약하다......ㅜ 정답 코드를 보면 아~~~맞네 이런 리액션이 나올 정도로 코드는 간결하고 간단하다. 간단하게, 발생할 수 있는 예시는 다음과 같다. 1. 지속적으로 증가하는 구간이 없고 올라갔다 내려갔다 들쑥날쑥한 그래프( [7, 1, 4, 3, 5, 2, 4] ) 이 경우는, 위에 그림에서 표시한 A+B>C이다. 따라서, 지속적으로 증가하는 부분이 없는 경우에는 1->5로 바로 점프를 하는 것보다는 각각 1->4, 3->5로 주식을 사고 파는 것이 훨씬 이득이다. 2. 지속적으로 증가하는 구간이 있는 그래프( [1, 7, 2, 3, 5, 7, 2] ) 위 그림에서는 A+B+C = D이다. 따라서, 지속적으로 증가하는 부분의 경우에는 2->7로 바로 점프를 하는 것이 2->3, 3..