일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 카카오인턴
- 유니온파인드
- Union-find
- 삼성 #코테 #2020상반기 #c++
- 투포인터
- 1편
- 중반부
- BFS
- Algorithm
- 서버개발캠프
- 보석쇼핑
- 카카오
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- Smilegate
- LIS #Algorithm #요소추적
- 코딩테스트
- 스마일게이트
- 식단
- 백준
- 알고리즘
- c++
- 소감
- 코테
- Today
- Total
목록Algorithm (178)
짱아의 개발 기록장
중복된 값들을 제거하여 하나의 정렬된 리스트를 출력하는 문제였습니다. 현재 노드의 값과 다음 노드의 값이 같을 때에는 현재 노드의 next 포인터가 다다음 노드를 가르키도록 했습니다. 코드를 보면 더 이해가 쉽게 갈 것 같습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Solution { public: ListNode* deleteDuplicates(ListNode* head) { ListNode* tmp = head; while(tmp!=NULL && tmp->next!=NULL) { if(tmp->val == tmp->next->val) { tmp->next = tmp->next->next; } else { tmp = tmp->next; } } retur..
처음에는 쉽게 쉽게 풀 수 있을 줄 알았으나? 그렇게 쉽지는 않았던 문제였다. 일단, 문자열이 공백으로 끝날 수도 있고 문자로 끝날 수도 있기 때문에 변수 before, curr 로 문자열의 길이를 저장해주었다. 1. 문자로 끝날 경우 -> curr의 길이를 반환 2. 공백으로 끝날 경우 -> before의 길이를 반환 이렇게 나눈 이유는, 공백이 올 경우 바로 끝날 수도 있고 그 다음에 또 문자가 다시 올 수도 있기 때문이다. 따라서, curr 변수를 계속 초기화 해야하지만 공백으로 끝날 경우 초기화하면 전의 문자 길이를 반환할 수 없기 때문에 2가지 변수로 구분할 수 밖에 없었다....(말이 너무 복잡해보이지만^^ 코드를 보면 잘 이해가 될 것 같다) 1 2 3 4 5 6 7 8 9 10 11 12 ..
중위 순회 방식을 구현하는 가장 기본적인 기초 문제였습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Solution { public: vector ans; void traverse(TreeNode* root) { if(!root) return; traverse(root->left); ans.push_back(root->val); traverse(root->right); } vector inorderTraversal (TreeNode* root) { traverse(root); return ans; } }; Colored by Color Scripter cs
배열을 90도 시계방향으로 회전 시키는 문제이다. n*n배열이라고 가정했을 때, (i, j)점은 (j, n-1-i)점과 대응된다. 코드는 다음과 같습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Solution { public: void rotate(vector& matrix) { // (i, j) -> (j, n-1-i) int v[21][21]; int n = matrix.size(); for(int i=0; i
회사에서 교육 듣느라 넘 바빠서 오랜만에 다시 LeetCode 정주행을 시작하려고 한다! 아무래도 문제의 추천수가 많을수록 퀄리티가 높고 좋은 문제라고 생각해서 Top 100 Liked Questions 카테고리에 있는 문제들을 다 풀어보려고 한다. Jump Game || 문제는 Greedy한 아이디어로 풀 수 있는 문제이다. 코드가 짧고 간결하기 때문에 코드를 참고하시면 이해가 빠를 것이라 생각합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 class Solution { public: int jump(vector& nums) { int chk[10001] = {0, }; bool isReach = false; for(int i=0; i
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, };..
이 문제는 아무래도 시간 절약이 관건인 문제라고 생각한다. 운 좋게도, 그냥 완탐으로 풀었는데도 Accepted는 받아냈다.. 하지만 고작 7.46% 성능이 나왔다...또륵 나중에 더 좋은 방법을 생각해보는 걸로...^^ 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 nextGreaterElement(vector& nums1, vector& nums2) { vector ans; for(int i=0; i
1로 칠해진 부분을 일일히 방문하여 겹쳐진 부분이 있는 가장자리를 제외해준다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Solution { public: int islandPerimeter(vector& grid) { int row = grid.size(); int col = grid[0].size(); int count = 0; for(int i=0; i=0 && grid[i][j-1]==1) count--; if(i+1