Leetcode/Top Interview 150 46

[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] 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..

[Stack][Medium] 150. Evaluate Reverse Polish Notation

https://leetcode.com/problems/evaluate-reverse-polish-notation/description Q. 주어진 token과 같은 수식이 주어질 때, 결과를 도출 하여 반환하라.   Solution.  stack을 처리하는 방식의 1차원 적인 문제.  기호가 나오면 가장 가까운 숫자 2개를 pop해서 stack에 다시 집어 넣고  다음 연산에 사용한다.  public int EvalRPN(string[] tokens) { Stack buff = new Stack(); for(int q = 0; q    결과.

[Stack][Medium] 71. Simplify Path

https://leetcode.com/problems/simplify-path/description Q. 주어진 / path 를 간단화한 방식으로 재정리 하라.   Solution.  '/', '..' , '.' 등에 의한 operation 처리가 필요하다.  이때 이 operation의 바로 앞 path 를 처리하는 것이므로, 마지막 input path data가 필요하다.  따라서 stack style 자료구조가 필요.   역시 먼저 최대한 단순화 해 본다.    주어진 string에서 slash를 제외하고 단어를 뽑아 본다.   그리고 그 중에서 path name, operation 등을 구분하여 처리한다.   마지막으로 stack은 반대로 data가 쌓이므로, 이를 유의하여 최종 데이터를 만든다...

[Intervals][Easy] 228. Summary Ranges

https://leetcode.com/problems/summary-ranges/description Q. 주어진 정렬된 정수 배열 nums의 범위를 아래와 같은 규칙의 string으로 표시하라.  Solution.  논리대로 코드를 작성한다.  다른 문제의 초석이 되는 구간 check 구현을 확인하는 문제.  public IList SummaryRanges(int[] nums) { IList ret = new List(); if(nums.Length==0) return ret; int start = nums[0]; int cur = start; for(int q = 1; q {cur}"); else ret.Add($"{start}")..

[Hashmap][Easy] 219. Contains Duplicate II

https://leetcode.com/problems/contains-duplicate-ii/description Q. 정수 배열 nums와 정수 k 가 주어질 때, 그 값이 같고 index차이가 k보다 같거나 작은 두 원소가 존재하는지 찾아라.   Solution 역시, 말이 복잡해 보이지, 조건 자체는 간단하다.    같은 원소 중 위치 차이가 k 이하로 나는 두 원소를 찾는다.  public bool ContainsNearbyDuplicate(int[] nums, int k) { Dictionary> dictBuff = new Dictionary>(); for(int q = 0; q ()); else { for(int z = 0; z   결과.

[Hashmap][Easy] 202. Happy Number

https://leetcode.com/problems/happy-number/description Q. 해당 정수 number가 주어질 때, 이것이 happy number 인지 판단하라.  각 자리수를 반복해서 더한 합이 1 이 되면 이것을 happy number라고 부른다.   Solution. 우선 happy number가 되는지 판별하는 코드를 만든다.  happy number가 되지 않으면 해당 과정을 다시 밟는데, 특정 숫자들은 기존에 나왔던 숫자셋이 다시 나오기 시작한다. 이렇게 되면 이 과정이 무한히 반복되게 된다. 이때 이 숫자는 happy number가 되지 않는다고 판단할 수 있다.  다만 숫자 자리수 조합을 비교할 때, 같은 조합인지를 비교해야하므로, 여러가지 방법으로 이를 체크 할 ..