LeetCode를 결제하고 Explore를 하나 다 풀어보면서 느낀점을 정리하고자 한다. 일단, 해당 챕터의 문제를 풀면서 가장 많이 사용했던 건 Set 컨테이너 였다. 물론 Set 말고도 TwoPointer로 구현하는 방법도 배우면서 활용능력에 많은 도움이 되었다. 물론 아예 풀지 못한 문제도 있었는데. 솔루션이 잘 나와있기 때문에 풀이를 보고 나서 내일 다시 풀어보고 풀어보고를 반복했다.
📘 배운 점- https://app.gitbook.com/o/taSHeKNauuWjMHNBR1b2/s/81EQp5agFGCXrLLcZPJX/week-2 😅 어려웠던 점. 캡슐화와 정보은닉에 대한 차이점에 대해 명확히 구분 할 수 있었다. 느낌점 이제 2 주차가 되었다. 회고록을 작성할 때면 어떤 내용을 채워 넣을지 고민이 된다. 깃 북을 통해 열심히 배운 점을 정리하고는 있지만, 회고록에 어떤 내용들을 넣을지 템플릿을 좀 고민해봐야겠다.
처음 이 문제를 보았을 땐 set만 이용해서 풀 수 있을거라 생각했다. set에 넣은 값이 있으면 count를 증가시킨 후 maxCount를 최종적으로 리턴하면 해당 3개의 케이스는 풀 수 있었다. #include class Solution { public: int lengthOfLongestSubstring(string s) { set sets; int count = 0; int maxCount = 1; if(s.size() == 0){ return 0; } for(int i = 0 ; i < s.size();i++){ if(sets.find(s[i]) != sets.end()){ maxCount = max(count, maxCount); count = 1; continue; } sets.insert(..
풀이. #include #include #include #include class Solution { public: string longestCommonPrefix(vector& strs) { string answer = ""; size_t shortest_length = strs[0].length(); // 첫 번째 문자열의 길이로 초기화 for (const auto& str : strs) { shortest_length = std::min(shortest_length, str.length()); } for(int i = 0 ; i < shortest_length; i++){ char firstStr = strs[0][i]; for(int j = 1 ; j < strs.size(); j++){ // s..
좋았던 점. - HTTP와 OSI 7계층에 대해 깊게 파볼 수 있는 기회를 가졌다. - 편하게 Spring에서 제공하는 TCP Server를 사용하였으나, 직접 Socket Server를 구현해볼 수 있는 기회를 가졌다. - 공부하였던 것. https://app.gitbook.com/o/taSHeKNauuWjMHNBR1b2/s/81EQp5agFGCXrLLcZPJX/week-1/1-http GitBook app.gitbook.com package kr.megaptera.assignment; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson..
우선 쿠버네티스란 무엇인지 쉽게 정리해보자. Traditional Deployment 극 초기의 회사 조직 또는 CI/CD 관련 지식이 없는 일반 학생의 경우, 만들어진 서버를 구동하기 위해선 로컬서버를 띄우고 구동했다. 즉 물리서버 컴퓨터가 하나 존재하고 거기에 서버를 띄운 뒤 포트를 열어 클라이언트가 서버에 접근하는 방식이다. 다만, 가상화 배포 시대로 넘어가게된 이유를 예로 들어 설명해보겠다. --- Google에선 Google과같은 웹 포털 사이트를 운영을 로컬 서버에 띄운 뒤, 사업이 흥해서 유튜브 서버도 운영을 하게 되었다 구글은 똑같은 서버 컴퓨터에 다른 포트로 유튜브 서버를 배포 할 수 있지만, 문제는 Google에서 실 이용자 수가 너무 많아서 한 대의 서버 컴퓨터로는 이것을 감당 할 수..
공유된 자원에 여러 개의 쓰레드가 동시 접근 하는 문제를 해결하기 위해선 여러가지 방법들이 있다. 첫 째로, Lock이 해제 될 때 까지 무한히 기다리는 방법이 있을 것이며 이것이 오늘 설명할 스핀락의 기조다. 둘 째로 콜백 방식이 있을 것이며 셋 째로 특정 시간 뒤에 다시 찾아가는 방식이 있다. 여러 방식 중 오늘은 첫 번째 방식인 스핀락에 대해 설명하고자 한다. 간단히 그림과 같이 2개의 쓰레드가 공유된 자원에 접근 시, Task A가 먼저 접근하였다고 가정하자. Task B는 A가 unlock을 할 때 까지 무한히 대기하다가, unlock이 되면 접근하는 구조다. 문제 사항으로는 당연히, Task B는 쓸대 없이 A가 끝날 때 까지 기다려야 하므로 오버헤드가 발생하고 CPU 점유율에 영향을 미친다...
해당 문제는 연산자 오버로딩에 대한 개념만 있으면 쉽게 풀 수 있다. int N; vector v; void Intput() { cin >> N; for (int i = 0; i > x >> y; v.push_back({ x,y }); } } 입력은 x,y를 받아준다. 순서는 y 오름차순을 기준으로하고 y가 같다면 x값을 비교한 뒤 오름차순 한다. bool operatorVector (const pair& a, const pair& b) { if (a.second == b.second) { return a.first < b.first; } return a.second < b.second; } 정렬 조건으로 만들어줄 비교 함수 하나를 만들어주었다. void ..
해당 문제는 Stack으로 풀면 간단하다. 0이 들어올 때, pop을 해주면 된다. int N; stack s; void Intput() { cin >> N; for (int i = 0; i > data; if (data == 0) s.pop(); else s.push(data); } } 이후 스택에 쌓인 수 만큼 합산 해주고 출력해주면 된다 void Solution() { int sum = 0; while (!s.empty()) { sum += s.top(); s.pop(); } cout > N; for (int i = 0; i > data; if (data == 0) s.pop(); else s.push(..
해당 문제는 그리디 알고리즘 ( 탐욕법 )으로 풀 수 있다. 간단히 해당 알고리즘을 적용하여 풀이 법을 그림으로 살펴보자면 일단 N이 11이라고 가졍했을 때, 5로 먼저 뺄 수 있는지 확인 후 5로 뺄 수 있으면 빼준다. 이후 (11-5)가 다시 5로 먼저 뺄 수 있는지 확인하고 뺄 수 있다면, 또 빼준다. (11-5-5)가 다시 5로 먼저 뺄 수 있는지 살펴본다. 뺄 수 없으니 이제 3으로 뺄 수 있는지 살펴본다. 뺄 수 없으니, 다시 (11-5)로 돌아가서 3으로 뺄 수 있는지 살펴본다. 뺄 수 있으니 (11-5-3)이 5로 뺄 수 있는지 살펴본다. 뺄 수 없으니, 3으로 뺄 수 있는지 살펴본다. 뺄 수 있다. 해당 값이 0이면 위로 타고타고 올라가서, 얼마나 거쳤는지를 알려주면 된다. 코드로 구현해..