전체 글 446

[파이썬 알고리즘 인터뷰][BST] 이진 탐색 트리 합의 범위

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 로그 재정렬 기준 책에서 구현된 코드 # 1. 재귀 class Solution: def rangeSumBST(self, root: TreeNode, L: int, R: int) -> int: def dfs(node: TreeNode): if not node: return 0 if node.val R: return dfs(node.left) return node.val + dfs(node.left) + dfs(node.right) return dfs(root) # 2. stack (DFS) class Solution: def ran..

책읽기 2021.08.04

[파이썬 알고리즘 인터뷰][BST] 이진 탐색 트리를 더 큰 수 합게 트리로

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 노드의 값을 현재 노드의 값보다 큰 모든 노드의 값의 합으로 변경 책에서 구현된 코드 class Solution: val: int = 0 def bstToGst(self, root: TreeNode) -> TreeNode: # 중위 순회 노드 값 누적 if root: self.bstToGst(root.right) self.val += root.val root.val = self.val self.bstToGst(root.left) return root 기억해야할 기법 구현보다 활용이 더 어려울듯 문제를 트리로 전환하여 떠올리는 것 문제의 요구사항을 그림으로 떠올리는 것 그 그림이 중위순회를 의미한다는 것을 캐..

책읽기 2021.08.04

[파이썬 알고리즘 인터뷰][BST] 정렬된 배열의 이진 탐색 트리 변환

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 정렬된 리스트를 받아 균형 이진 검색 트리 만들기 책에서 구현된 코드 class Solution: def sortedArrayToBST(self, nums: List[int]) -> TreeNode: if not nums: return None mid = len(nums) // 2 # 분할 정복으로 이진 검색 결과 트리 구성 node = TreeNode(nums[mid]) node.left = self.sortedArrayToBST(nums[:mid]) node.right = self.sortedArrayToBST(nums[mid + 1:]) return node 기억해야할 기법 중간값(이진탐색)에서의 범위..

책읽기 2021.08.04

[TCPschool][3장] 타입

이 글은 "TCPschool/코딩과 데이터/MySQL"을 읽고 주관적으로 작성된 글입니다. https://tcpschool.com/mysql/intro 코딩교육 티씨피스쿨 4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등 tcpschool.com 1. 숫자 타입 1) 타입(data type) 테이블의 필드별로 저장할 수 있는 타입 명시 숫자 타입 문자열 타입 날짜와 시간 타입 2) 숫자 타입 SQL 표준에서 지원하는 모든 숫자 타입 제공 정수 타입 고정 소수점 타입 부동 소수점 타입 비트값 타입 3) 정수 타입(integer type) MySQL이 제공하는 SQL 표준 정수 타입 INTEGER(INT) SMALLINT MySQL이 제공하는 확장 정수 타입 TINY..

CS/MySQL 2021.08.04

[Java의 정석][Chapter-3] 연산자

이 글은 "Java의 정석 (남궁 성 지음)"을 읽고 주관적으로 요약한 글입니다. 1. 연산자 연산자와 피연산자 연산자 - 연산을 수행하는 기호 피연산자 - 연산자의 작업 대상 대입 연산자(=) 식(expression) - 연산자와 피연산자를 조합하여 계산하고자하는 바를 표현하는 것 식을 평가?(evaluation) - 식을 계산하여 결과를 얻는 것 연산자 종류 산술 연산자 - [ + - * / % > ] 비교 연산자 - [ > = 비교 > 논리 > 대입 - 단항 > 이항 > 삼항 - 같은 종류의 연산자들은 우선순위가 비슷함 연산자의 결합규칙 같은 우선순위의 연산자들이 여러 개일 경우 갖는 처리 규칙 대부분 - 왼쪽 -> 오른쪽 단항 연산자, 대입 연산자 - 오른쪽 -> 왼쪽 - x = y = 3 ..

책읽기 2021.08.04

[파이썬 알고리즘 인터뷰][트리] 최소 높이 트리

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 그래프의 최소 신장 트리가 되는 루트 출력 책에서 구현된 코드 class Solution: def findMinHeightTrees(self, n: int, edges: List[List[int]]) -> List[int]: if n 2: n -= len(leaves) new_leaves = [] for leaf in leaves: neighbor = graph[leaf].pop() graph[neighbor].remove(leaf) if len(graph[neighbor]) == 1: new_leaves.append(neighbor) leaves = new_leaves return leaves 기억해야할 ..

책읽기 2021.08.04

[파이썬 알고리즘 인터뷰][트리] 균형 이진 트리

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 로그 재정렬 기준 책에서 구현된 코드 class Solution: def isBalanced(self, root: TreeNode) -> bool: def check(root): if not root: return 0 left = check(root.left) right = check(root.right) # 높이 차이가 나는 경우 -1, 이외에는 높이에 따라 1 증가 if left == -1 or \ right == -1 or \ abs(left - right) > 1: return -1 return max(left, right) + 1 return check(root) != -1 기억해야할 기법 DFS에..

책읽기 2021.08.03

[파이썬 알고리즘 인터뷰][트리] 이진 트리 직렬화 & 역직렬화

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 직렬화 / 역직렬화 구현 책에서 구현된 코드 class Codec: # 직렬화 def serialize(self, root: TreeNode) -> str: queue = collections.deque([root]) result = ['#'] # 트리 BFS 직렬화 while queue: node = queue.popleft() if node: queue.append(node.left) queue.append(node.right) result.append(str(node.val)) else: result.append('#') return ' '.join(result) # 역직렬화 def deserializ..

책읽기 2021.08.03

[파이썬 알고리즘 인터뷰][트리] 두 이진 트리 병합

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 로그 재정렬 기준 책에서 구현된 코드 class Solution: def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode: if t1 and t2: node = TreeNode(t1.val + t2.val) node.left = self.mergeTrees(t1.left, t2.left) node.right = self.mergeTrees(t1.right, t2.right) return node else: return t1 or t2 기억해야할 기법 return t1 or t2 둘 중 하나가 존재하면, 존재하는 객체 리턴 둘 다 존재하지 않는다면, Non..

책읽기 2021.08.03

[파이썬 알고리즘 인터뷰][트리] 이진 트리 반전

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 트리의 child들을 모두 반전 책에서 구현된 코드 class Solution: def invertTree(self, root: TreeNode) -> TreeNode: if root: root.left, root.right = \ self.invertTree(root.right), self.invertTree(root.left) return root return None 기억해야할 기법 단순 swap도 재귀로 구현 재귀가 일어난 시점에서 어떤 연산이나 복잡한 과정이 필수적인 사항은 아님 놀랍게 깔끔하다 내가 구현한 코드 class Solution: def invertTree(self, root: TreeN..

책읽기 2021.08.03