Programming/leetcode
-
538. Convert BST to Greater TreeProgramming/leetcode 2021. 2. 11. 18:52
영어 해석이 안되면, 그림 해석을 잘해야되는데, 아직은 그렇지 못한것 같다. 그래프를 돌면서 값을 더해주면 되는 문제였는데, 왜 어제는 안보였는지 모르겠다. BST는 자식 - 부모 순으로 순회를 하는 것이다. 이진탐색트리는 전위, 중위, 후위 순회 방법이 있다. 전위 순회(Preorder Traversal): 부모 → 좌 → 우 중위 순회(Inorder Traversal): 좌 → 부모 → 우 후위 순회(Postorder Traversal): 좌 → 우 → 부모 문제에서는 우->부모->좌로 순회를 한다. 중위 순회의 변형이라 볼수 있겠다. 오른쪽 자식이 없을때 까지 내려간 다음, val을 우->부모->좌 순서로 더해서 올라오면 된다. def __init__(self): self.sum = 0 def co..
-
2. Add Two NumbersProgramming/leetcode 2021. 2. 8. 22:15
이전에 풀었던 hongprogrammer.tistory.com/entry/206-Reverse-Linked-List 를 참고하면 쉬운 문제 두 개의 Linked List가 오고 이것을 int로 변환해서 계산을 하고, 다시 Linked List로 만드는 문제 내가 풀이 한 방법은 다음과 같다 1) Linked List를 역순으로 만든다. 2) 역순이 된 LinkedList를 str로 만들고, 다시 int로 만든다. 3) int형이 된 listNode를 더하고, 다시 LinkedList로 만들다 코드는 길지만, 천천히 따라가보면 충분히 이해 가능할것 같다., def reverseList(self, head:ListNode)->ListNode: node, prev = head, None while node: ..
-
821. Shortest Distance to a CharacterProgramming/leetcode 2021. 2. 8. 10:50
ee난이도 쉬움이라 가볍게 풀 수 있겠다 싶었는데.. python의 리스트 슬라이싱을 헤메서 좀 고생했다. 역순으로 배열할꺼면 끝값을 지정안해줘도 되는데, 자꾸 습관적으로 지정해서 왜 안될까 2시간을 고민했다. 문제 자체는 쉽다. 주어진 s 라는 문자열에서 c 문자까지 거리를 측정하는데, 앞뒤중에서 짧은 것을 저장하면 된다. 리스트 슬라이싱과 find로 해결하였다. def shortestToChar(self, s: str, c: str) -> List[int]: result = [] for i in range(len(s)): left_lst = s[i::-1] right_lst = s[i:len(s):1] lst_pos = left_lst.find(c) rst_pos = right_lst.find(c) ..
-
21. Merge Two Sorted ListsProgramming/leetcode 2021. 2. 5. 09:34
두 개의 연결리스트를 합치는데, 크기 순으로 합치는 문제 [1,3,4], [1,2,3] 3->4, 1->2->3) 답은 1->1->2->3->3->4이다. 책에는 다른 방법이지만, 알아보기 힘들어서 풀어서 생각을 했다. 각 연결리스트를 하나의 리스트에 넣고, 정렬을 한다. 이후에 다시 연결 리스트로 만들어서 출력한다. 문제에서 주어진 시간복잡도나 공간복잡도의 제약사항이 없어 가능한 위 방법이 가능했던것 같다. def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: result = [] if not l1 and not l2: return None while l1: result.append(l1.val) l1 = l1.next while l2: r..
-
1148. Longest Harmonious SubsequenceProgramming/leetcode 2021. 2. 4. 23:51
문제 그대로 써보면 최소값과 최대값이 차이가 1이 나는 모음을 조화로운 배열이라고 한다. Input: nums = [1,3,2,2,5,2,3,7] Output: 5 Explanation: The longest harmonious subsequence is [3,2,2,2,3]. Collections.Count로 출현 횟수를 세고, nums를 for문으로 돌면서 자기 자신을 최소값으로 하고 자신 +1을 최대값으로 가정해서 max값을 출력하면 된다. def findLHS(self, nums: List[int]) -> int: dic = collections.Counter(nums) cnt = 0 for num in nums: # num이 최솟값이고 +1 나는게 최댓값 if num+1 in dic.keys()..
-
141. Linked List CycleProgramming/leetcode 2021. 2. 4. 23:40
주어진 linked list가 순환하는지 판별하는 문제이다. 이전에 234번에서 풀었던 Runner 기법을 이용하면 쉽게 풀린다. hongprogrammer.tistory.com/entry/234-Palindrome-Linked-List 234. Palindrome Linked List 주어진 linked list가 회문인지 판단하는 문제이다. 난이도는 쉽다. linked list를 직접 변경할 수 없으니, in-out이 쉬운 구조가 되어야한다. python에서는 list에서 특정 지점에서 pop도 지원한다. 1) list 이 hongprogrammer.tistory.com slow는 한칸씩 가면서, fast는 두칸씩 전진해서 나간다. 무한 반복해가면서 같은것이 나올때까지 돌린다. def hasCycle..