일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c++
- 알고리즘
- 서버개발캠프
- 소감
- 스마일게이트
- 1편
- BFS
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- 코딩테스트
- 투포인터
- 카카오
- BaekJoon
- Algorithm
- 유니온파인드
- Union-find
- 식단
- LIS #Algorithm #요소추적
- 삼성 #코테 #2020상반기 #c++
- 코테
- 백준
- 보석쇼핑
- 카카오인턴
- 중반부
- Smilegate
- Today
- Total
목록Category (222)
짱아의 개발 기록장
IoC 컨테이너는 주로 BeanFactory나 ApplicationContext를 사용한다. ApplicationContext는 BeanFactory를 상속받고 더 많은 기능을 제공하고 있기 때문에 이 프로젝트에서는 주로 ApplicationContext를 사용할 예정이다. IoC컨테이너는 Bean을 만들고 Bean사이의 의존성을 엮어주고 최종적으로 Bean을 제공해준다. pet-clinic프로젝트에서는 OwnerController, OwnerRepository, PetController, PetRepository가 IoC컨테이너에 Bean으로 등록되어 있다. 모든 클래스가 Bean으로 등록된 것은 아니다!! 위 사진처럼 녹생 콩 모양이 클래스 옆에 표시된다면, Bean으로 등록된 것이다. 📌의존성 주입..
dfs중에서도 hard난이도에 해당되는 문제이다. Tree문제인데, BST의 두 노드가 바뀐 상태로 입력이 주어져질 때, structure을 바꾸지 않고 recovery하면 된다. 솔직히 InorderTraversal 후 모든 두 개의 값을 reverse해주고 오름차순으로 정렬되는 지 BruteForce로 일일히 확인하는 그런 방법 밖에 생각이 나지 않아서.... 다른 외국 유투버의 풀이방법을 참고했다. 간단한 로직은 다음 사진으로 첨부했다. 사진 그대로 1) 역전되는 곳이 1pair 생긴다면, 첫 번째 값을 first로, 두 번째 값을 second로 간주했다. 2) 역전되는 곳이 2pair 생긴다면, 첫 번째 pair의 첫 번째 값을 first로, 두 번째 pair의 두 번째 값을 second로 간주했..
Inversion of Control은 말 그대로 제어가 역전된 것을 의미한다. 일반적인 (의존에 대한) 제어권 : "내가 사용할 의존성은 내가 만든다." 1 2 3 class OwnerController{ private OwnerRepository repository = new OnwerRepository(); } Colored by Color Scripter cs IoC(Inversion of Control) : "내가 사용할 의존성을 누군가 알아서 해주겠지.." -> 내가 사용할 의존성의 타입(또는 인터페이스)만 맞으면 어떤거든 상관없다. -> 그래야 내 코드 테스트 하기도 편하지... 1 2 3 4 5 6 7 8 class OwnerController{ private OwnerRepository ..
dfs와 트리를 결합한 문제이다. Binary Search Tree의 특징에 대해 잘 이해하고 Tree의 Traversal이 어떻게 이루어지는 지 잘 이해하고 있으면 쉽게 풀이할 수 있다. [메인 로직] root->left, root->val, root->right순으로 dfs를 진행했다. 즉, Inorder Traversal을 통해 문제를 해결했다. 여기서 핵심은, BST의 경우 Inorder Traversal을 했을 때에 모든 값들이 오름 차순 정렬이 되어 있어야 한다는 것이다! root->val값들을 모두 vector에 저장해놓은 후, v[v.size()-1]의 값과 비교하여 이 값보다 작다면 무조건 false를 반환하도록 했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16..
오랜만에 dfs문제를 풀고 싶어서 LeetCode에서 dfs태그로 들어갔다. 재밌는 문제가 많아보였지만 역시 첫 번째 문제부터 들어갔다. 간단하게 dfs 재귀 방식으로 풀 수 있었다. [메인 로직] vector에 2~9까지의 idx에 각각 해당되는 문자를 넣어주었고 dfs로 digits에 해당되는 문자를 하나씩 탐색했다. 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: vector ans; vector phone[11]; void dfs(string digits, int idx, string..
3강에서는 총 3개의 과제가 주어졌고 글쓴이는 3개를 모두 완료했다. -LastName이 아니라 FirstName으로 검색하기 ✅ -Owner에 age추가하기 ✅ -정확하게 일치하는게 아니라 해당 키워드가 들어있는 것을 찾을 수 있도록 하기 ✅ 1. LastName이 아닌 FirstName으로 검색하기 -> 뷰 변경 -> 코드 조금 변경 controller파일에서 /owner/find로 들어가면 owners/findOwners로 리턴되기 때문에 그 파일을 변경하는 것이 핵심이다. findOwners.html파일의 lastName관련된 것을 모두 firstName으로 변경했다. 2. Owner에 age추가하기 -> 모델 변경(도메인 모델 -> Owner.java파일 수정) -> 스키마 변경(h2, hsql..
생각보다 이런 유형의 문제들이 여러 기업들의 코딩테스트에 많이 출제된다. 거의 대부분 이런 문제들은 투포인터로 푸는 것이 시간복잡도를 줄일 수 있는 현명한 방법이다. 물론, Brute Force로 풀 수 있겠지만... O(n^2)이면 크기에 따라 Time Limit이 찍힐 수도 있다. LeetCode의 경우 C++기준으로 Time Limit이 뜬다. 투포인터 시간복잡도 : O(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 // Two-pointer class Solution { public: int maxArea(vector& height) { // 어차피 짧은 높이에 의해 넓이가 결정되기 때문에 // 맨끝 양쪽에서 ..
팰린드롬인지 판별하는 문제였다. 크게 2가지 방법으로 해결할 수 있었다. 1. for문으로 문자열 역전하기 시간복잡도 : O(n) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Solution { public: bool isPalindrome(int x) { string original = to_string(x); string reversed = ""; for(int i=original.size()-1; i>=0; i--){ reversed += original[i]; } if(original==reversed){ return true; } return false; } }; Colored by Color Scripter cs 2. 나머지와 몫으로 문자열 역전하기 시간복잡..