일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 쿠버네티스
- FastAPI
- intervals
- IAC
- Service
- Django
- Network
- elasticsearch
- EC2
- K8S
- ansible
- asgi
- Python
- docker
- leetcode
- AZ-900
- POD
- WSGI
- AWS
- Deployment
- ebs
- asyncio
- 자바스크립트
- EKS
- event loop
- dockerfile
- AZURE
- terraform
- Kubernetes
- DevOps
- Today
- Total
목록Algorithm (30)
궁금한게 많은 개발자 노트
Binary Tree가 주어졌을 때, root에서 leaf node까지의 path에 해당하는 값들의 합이 targetSum과 일치하는 경로가 존재하는지 여부를 판단하는 문제입니다. 재귀를 활용하여 left, right 자식들로 들어가면서 leaf node가 되었을 시 targetSum이 0인지 확인하는 방식으로 해결하였습니다. /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(..
조합을 구하는 문제입니다. next_permutation을 활용하여 순열 중에서 원하는 개수만큼 뽑는 방식을 사용하였습니다. 모든 조합의 경우의 수를 출력하므로 출력할 개수를 늘리면서 확인하였습니다. #include #define swap(a,b,t)((t) = (a), (a) = (b), (b) = (t)) class Solution { public: vector subsets(vector& nums) { vector answer; answer.push_back(vector{}); for (int i = 0; i < nums.size(); i++) { vector exist(nums.size(), 0); for (int j = 0; j
start를 기준으로 오름차순으로 정렬된 겹치지 않는 구간 리스트가 주어졌을 때, 한 구간을 리스트에 삽입하는 문제입니다. 만약 삽입하는 과정에서 겹치는 구간이 발생하면 병합하여 하나의 구간을 만들어야 합니다. Binary Search로 삽입할 index를 구하고, 해당 index를 기준으로 좌우로 two pointer로 넓혀가며 겹치는 구간을 찾고, 겹치는 구간이 있다면 삭제 후 병합한 새 구간을 넣어서 해결하였습니다. #include class Solution { public: vector insert(vector& intervals, vector& newInterval) { vector::iterator insert_index = upper_bound(intervals.begin(), interva..
Binary Search Tree가 주어졌을 때, 한 노드를 제거하고 재배치한 BST를 반환하는 문제입니다. 여러 경우의 수가 있지만, 우선 한 노드를 삭제할 때 기본적인 규칙은 다음과 같습니다. 삭제할 노드의 자식 중 한쪽 노드만 존재하는 경우, 삭제할 노드 위치를 해당 노드로 변경 삭제할 노드의 자식 둘 다 존재하는 경우, 왼쪽 자식 노드를 삭제할 노드로 대체한다고 하면 왼쪽 자식 노드의 오른쪽 노드를 삭제할 노드의 오른쪽 자식의 가장 왼쪽 자식에 추가해주는 로직이 필요 (반대의 경우도 가능) 아래 링크를 참고하면 이해에 도움이 될 것 같습니다. https://leetcode.com/problems/delete-node-in-a-bst/solutions/1591176/c-simple-solution-..
막대의 높이가 담긴 배열이 주어졌을 때, 두 막대와 x축으로 담기는 물의 최대 양을 구하는 문제입니다. two pointer문제로 이차원 배열에서 시간 초과가 발생하는 문제를 해결합니다. 두 포인터 중 작은 쪽의 포인터를 변경하고, 넓이 구할 시 가로는 포인터 사이 거리이고, 높이는 작은 막대로 구합니다. #define max(a,b)((a) > (b) ? (a) : (b)) #define min(a,b)((a) > (b) ? (b) : (a)) class Solution { public: int maxArea(vector& height) { int answer = 0; int i = 0; int j = height.size() - 1; while (i < j) { if (height[i] < heigh..