#Binary_Tree #Recursion #BFS #DFS URL Invert Binary Tree - LeetCode Intuition Recursion 사용 Solution # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]: if root is None: return None root.left, root.rig..
#Two_Pointers #String URL Valid Palindrome - LeetCode Intuition Solution 1: String을 반으로 잘라서 reverse한 후 같은지 확인 Solution 2: isalnum() 함수 사용, String을 반으로 자르지 않고 바로 비교 Solution 3: pointer를 사용해서 왼쪽 끝, 오른쪽 끝이 같은지 비교 (풀이 참고) Solution 4: Deque 사용 (풀이 참고) Review Notes String 뒤집기 s[::-1] 사용: 문자열 자르기와 함께 사용하면 결과가 이상하게 나옴 reversed(s) 사용: 결과를 join을 사용해서 다시 합쳐주어야 함 isalnum(): 알파벳 또는 숫자인 경우 True를 반환 성능 비교 Runt..
코딩 테스트에서 많이 사용되는 Python String 정리 # 문자열 정렬하기 str 타입에는 sort()를 사용할 수 없기 때문에 sorted()를 사용한다. sorted()는 return type이 list이기 때문에 join을 사용하여 다시 string으로 바꿔주는 과정이 필요하다. s.sort() # 불가능 sorted(s) # 가능 "".join(sorted(t)) # 정렬 후 문자열로 # 문자 수 세기: count 특정 문자가 몇 개 포함되어 있는지 개수를 반환한다. >>> s = "abc abc" >>> s.count("a") 2 # 위치 찾기: find 처음으로 나온 문자의 위치를 반환한다. 찾는 문자가 없으면 -1을 반환한다. >>> a = "abcde" >>> a.find('b') 1..
#Array #Dynamic Programming URL Best Time to Buy and Sell Stock - LeetCode Intuition Solution 1: for문 반복하면서 모든 profit을 계산한다. 그 중 max profit을 반환한다 ⇒ Time Limit Exceeded Solution 2: profit을 모두 계산하되, min_price와 profit을 swap하며 그때그때 최신 값으로 업데이트한다. min_price: 문제에서 price는 10000을 넘지 않는다고 하였으므로 초기값을 10000으로 두고 시작 Review Notes Time Limit Exceeded 코드 (실패) class Solution: def maxProfit(self, prices: List[in..
#Listed_Node #Recursion URL Merge Two Sorted Lists - LeetCode Intuition 처음에는 list1 자체를 수정하려고 했다.list2: 1 → 3 → 5인 경우 temp = list1 으로 temp 변수에 잠시 list1을 담아두고, list1 = list2 (즉, list1: 1→3→5) list1.next = temp (즉, list1: 1→2→4→6) list2 = list2.next (즉, list2: 3→5) list1 = list1.next 이런 식으로 하는 경우 list1의 포인터가 계속 바뀌어서 리스트노드의 첫 노드를 return할 수가 없었다. 현재 list1.val > list2.val 이므로 list1: 2 → 4 → 6 Review N..
#String #Stack URL Valid Parentheses - LeetCode Intuition Solution 1 여는 괄호(([{)인 경우: 일단 stack에 넣는다 닫는 괄호()]})인 경우 stack이 비었는데 닫는 괄호가 들어오면 return False stack.pop()을 했을 때 짝이 맞는 경우 stack의 마지막 요소와 짝이 맞지 않는 경우 이 과정이 끝났는데 stack이 비어있지 않은 경우: return False Review Notes Solution 2: dict를 사용한 정리된 코드(풀이 참고) Solution # Solution 1: 내 풀이 class Solution: def isValid(self, s: str) -> bool: stack = [] for char in..

01 도커를 사용하려면 도커는 기본적으로 리눅스용이지만 윈도우와 macOS에서도 사용할 수 있다 💡 도커환경을 구축하는 방법 리눅스 컴퓨터에서 도커 사용 가상머신이나 렌탈 환경에 도커 설치 윈도우용/macOS용 도커 사용 윈도우용/macOS용 도커 사용하기 도커 데스크톱: 윈도우나 macOS에서 도커 데스크톱을 패키지 형태로 제공하는 것 도커 데스크톱을 사용하면 가상화 환경이나 리눅스를 신경쓰지 않고 도커 사용 가능 Hyper-V, Hyper-Kit라는 가상화 기술을 사용 마우스를 이용한 조작 대신 명령행 인터페이스를 통해 조작한다 💡 컴퓨터 한 대에 운영체제 두 개를 돌려도 괜찮은가? : 리눅스는 도커가 전용으로 사용하는 숨겨진 운영체제라고 보면 된다. 도커 데스크톱 패키지를 삭제하면 리눅스 운영체제도..

01 도커의 동작 원리 도커의 구조 서버 컴퓨터(물리 서버) > 운영체제 > 도커 엔진 > 컨테이너 > 프로그램/데이터 컨테이너 안에는 리눅스 운영체제가 기본적으로 들어있다. (실제 OS는 아님) 즉, 리눅스 위에 가동되는 컨테이너 속에 또 리눅스(실제 OS아님)가 들어있다.그림과 같이 리눅스 커널을 제외한 부분만 컨테이너에 넣고, 커널은 컴퓨터 OS의 커널을 빌려씀 ⇒ 도커는 가볍다! 도커는 기본적으로 리눅스용이다. 도커는 리눅스를 바탕으로 동작하기 때문에, 컨테이너에서 리눅스용 SW가 아닌 프로그램(워드, 엑셀..)은 구동하지 못한다. 따라서 윈도우/맥에서 도커를 사용하기 위해서는 2가지 방법을 사용한다. 가상 환경(virtualBox)위에 리눅스 설치 후 도커 실행 도커 테스크톱 설치 02 도커 허..

01 도커란 무엇인가? 안개 속에 숨겨진 도커의 정체는? ‘데이터 또는 프로그램을 격리시키는’ 기능 제공서버에서는 아파치, MySQL 등 여러가지 프로그램들이 동시에 동작할 수 있다. 도커는 이러한 프로그램들과 데이터를 독립된 환경에서 격리하는 기능을 제공한다. 컨테이너와 도커 엔진도커는 이 컨테이너를 다루는 소프트웨어이다. 도커 엔진을 설치하여 컨테이너를 생성/구동시킨다. 컨테이너라는 독립된 공간에 데이터나 프로그램을 둔다. 컨테이너를 만들려면 이미지가 필요하다.Ex. 아파치 이미지 사용 → 아파치 컨테이너 생성 이미지는 빵틀 같은 기능을 한다. 도커는 리눅스 컴퓨터에서 사용한다. 도커를 구동하는 운영체제, 컨테이너에서 동작시킬 프로그램 모두 리눅스용이다. 데이터나 프로그램을 독립된 환경에 격리해야 하..
#Hash_Table #Array URL Two Sum - LeetCode Intuition 방법 1: 이중 for문으로 가능한 모든 조합을 만든다 Review Notes 방법 2: (풀이 참고) x = target - nums[i]와 dictionary를 사용해서, dictionary에 x가 존재하는지 확인한다 Solution from typing import List # Solution 1 class Solution1: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)): for j in range(i+1,len(nums)): if nums[i] + nums[j] == target: return [..

Git에서 Fork를 왜 사용할까? 이때까지 나는 clone을 사용해서 레포를 local에 들고왔다. fork를 사용하면 상대방의 레포를 들고오되, original repo에서 수정되는 사항 또한 반영할 수 있다. github에서는 fork가 간편하다. Create a new fork를 클릭해서 내 레포로 들고오면 된다. 깃허브에 있는 레포들은 모두 오픈소스이기 때문에 자유롭게 fork가 가능하다. * 참고 https://docs.github.com/ko/get-started/quickstart/fork-a-repo 리포지토리 포크 - GitHub Docs 포크는 원래 "업스트림" 리포지토리와 코드 및 표시 유형 설정을 공유하는 새 리포지토리입니다. docs.github.com

리눅스에 Ruby를 다운받다가 다음과 같은 에러가 발생했다. ``` BUILD FAILED (Amazon Linux 2023 using ruby-build 20230512) Inspect or clean up the working tree at /tmp/ruby-build.20230515101522.52871.9OdfUY Results logged to /tmp/ruby-build.20230515101522.52871.log Last 10 log lines: compiling ossl_x509ext.c compiling ossl_x509name.c /tmp/ccXiIpNv.s: Assembler messages: /tmp/ccXiIpNv.s: Fatal error: can't write 30 bytes ..