분류 전체보기 422

[BinaryTreeGeneral][Easy] 100. Same Tree

https://leetcode.com/problems/same-tree/description Q. 주어진 두 tree가 동일한 tree인지 판단하라.    Solution.  이런 경우엔 직관적으로 생각해 본다.  두 tree가 같기 위해선 leaf의 모양과 해당 data가 같아야 한다.  모양이 같다는 의미는 존재하는 위치가 같아야 한다는 것이며, empty leaf를 처리할 수 있으면 결국 판단 가능하다는 것이다.   BFS로 tree leaf를 순회하여 결과를 비교한다.  코드 더보기 List BFS(TreeNode node){ List ret = new List(); if(node == null) return ret; Queue buff = new Queue(); buf..

[LinkedList][Medium] 86. Partition List

https://leetcode.com/problems/partition-list/description  Q. 리스트가 주어질 때, x 보다 작은 값, 큰 값으로 노드를 구분하고 연결하라.  Solution.  해당 값을 기준으로 node를 재연결 하고,  해당 두 connection head를 연결해 준다.   코드. 더보기public ListNode Partition(ListNode head, int x) { ListNode node = head; ListNode part1 = null, part2 = null; ListNode n1 = null, n2 = null; while(node != null) { if(node.val   결과.

[LinkedList][Medium] 61. Rotate List

https://leetcode.com/problems/rotate-list/description  Q 주어진 리스트를 k 회 회전하라.   Solution 회전의 결과는 우선, 뒤에서 k 번째 노드를 찾아서 해당 노드를 head로 만들면 된다.   따라서 뒤에서 k 번째 노드를 찾고 새로운 head로 만든다.  기존 list의 tail 노드의 next를 기존 head에 연결한다.  k번째 노드의 앞노드는 새로운 tail 이 되므로 next를 null로 set 한다.   따라서 기본적으로 뒤에서 k 번째 노드를 찾는 문제와 매우 유사.   다만, k 가 리스트 길이보다 긴 경우, 리스트 길이로 정규화를 먼저 한다.  코드 더보기 public ListNode RotateRight(ListNode head, ..

[LinkedList][Medium] 82. Remove Duplicates from Sorted List II

https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/description Q. 정렬된 리스트에서 중복된 값을 가진 노드를 제거하고 결과 노드를 출력하라. Solution.  중복된 노드를 검색하고, 해당 노드 전후 처리 link 를 잘 해 주는 것이 핵심이라 하겠다.  다만, 중복노드 이전 노드를 알아야 중복이 끝난 지점 노드에 연결을 해 주므로, 이를 어떻게 처리하느냐  등이 조금 신경 쓸 여지가 있는 부분이 될 터이다.   최대한 현재 노드 기준으로 문제를 국한시키며, 단순화하는데 노력을 써 본다.  더보기 public ListNode DeleteDuplicates(ListNode head) { const int INIT = ..

[LinkedList][Medium] 92. Reverse Linked List II

https://leetcode.com/problems/reverse-linked-list-ii/description  Q. list가 주어지고, left, right 가 주어질 때, 이 left, right만 list를 뒤집어라.   Solution.  리스트 뒤집기 함수를 먼저 만든다, 그리고 연결 부분에 신경 쓴다.  더보기 public class Solution { public ListNode ReverseBetween(ListNode head, int left, int right) { --left; --right; int idx = 0; ListNode nodeResume = findNode(head, right+1); ListNode..

[LinkedList][Medium] 138. Copy List With Random Pointer

https://leetcode.com/problems/copy-list-with-random-pointer/description   Q. list가 주어질 때, 이 list의 노드는 next와 random pointer를 가지고 있다.  이 list를 깊은 복사를 하고, 그 결과를 반환하라.  Solution.  복잡해 보이지만 간단한 문제.  list를 그냥 복사하고, random에 대해 복사한 대상에 대해 같은 복사대상을 pointing하게 해 주면 된다.   문제는 복사대상을 찾는 과정인데,  어떤 최적화를 거친것을 문제가 원하는가, 아니면 모든 대상에 대해 그냥 O(N)탐색을 허용하는가 하는 것이다.   결과적으로 별 최적화 없이 해도 accpected 되었다.  더보기 public class S..

[Design] - 고찰.

System 디자인, 설계 등이 왜 필요할까 생각해 본다.  프로그래머는 컴퓨터로 하여금 사람이 원하는 일을 시키도록 translate 작업을 하는 사람이다.  그렇다면 기능구현을 하는데서 그 1차 책임이 종료된다고 할 수 있다.  그렇다면 OOP, SOLID, Design Pattern등은 무엇 때문에 필요한가.  Change Management, ?Minimize release cost for the codes that have changes/new functionalities, ?EfficiencyLook fancier?Engineering egoism? Clean Architecture 에서도 말하듯, 단위 코드 추가에 대한 최소한의 비용 유지가 아마도 가장 걸맞는 대답일 듯 싶다. 그러나 이 답..

[Behavioral Pattern] - Visitor

https://refactoring.guru/design-patterns/visitor VisitorProblem Imagine that your team develops an app which works with geographic information structured as one colossal graph. Each node of the graph may represent a complex entity such as a city, but also more granular things like industries, sightseeing areas,refactoring.guru 데이터 기반의 객체가 존재하고 이를 최대한 수정하고 싶지 않다. 이때 이 객체들을 기반으로 여러가지 기능을 추가하고 싶을때,..

[Behavioral Pattern] - Template Method

https://refactoring.guru/design-patterns/template-method Template MethodProblem Imagine that you’re creating a data mining application that analyzes corporate documents. Users feed the app documents in various formats (PDF, DOC, CSV), and it tries to extract meaningful data from these docs in a uniform format. The first versrefactoring.guru 특정 객체와 그 객체의 메인 로직의 frame이 이미 정해져 있다. 이때 확장을 통해서 해당 구현의..

[Behavioral Pattern] - Strategy

https://refactoring.guru/design-patterns/strategy StrategyThe Strategy pattern lets you isolate the code, internal data, and dependencies of various algorithms from the rest of the code. Various clients get a simple interface to execute the algorithms and switch them at runtime. The Strategy pattern lets you do arefactoring.guru  특정 알고리즘 처리를 위해 각 단계, 또는 전체를 객체로 정의하고 이를 외부 설정으로 교체 가능하게 하는 것.  예시 ..