목록분류 전체보기 (76)
one line of code at a time
https://leetcode.com/problems/reverse-linked-list/description/ 연결리스트를 reverse 하는 문제이다. 단일 연결 리스트 (singly-linked list)단일 연결리스트에서 각 노드는 '값 (val)'과 '다음 노드에 대한 참조 (next)'를 가지고 있다. # Definition for singly-linked list.class ListNode(object): def __init__(self, val=0, next=None): self.val = val self.next = nextiterative 하게 푸는 방법과 recursive 하게 푸는 방법이 있다. Iterative 하게 푸는 방법iterative 하게..
https://leetcode.com/problems/kth-largest-element-in-an-array/description/ 정수로 되어 있는 배열 nums에서 k번째로 큰 숫자를 찾는 것이다. "정렬" 알고리즘을 사용하지 않고! 내가 푼 방법은 heap을 사용했는데 max heap을 사용했다. max heap을 써서 k-1번 heappop(nums)을 해주고, 그 힙에서 0번째 값에 (-1)을 곱해서 리턴해주었다. class Solution(object): def findKthLargest(self, nums, k): nums = [(-1) * i for i in nums] heapq.heapify(nums) for _ in range(k-1): ..
What is Docker?- Docker is a platform for building, running, and shipping applications in a consistent manner- 내가 만든 프로그램이 다른 컴퓨터나 머신에서 안 돌아가는 경우가 있다. 그 이유로는 (1) one or more files missing, (2) software version mismatch (3) different configuration settings (environment variables are different across machines)docker-compose up - docker will automatically download and run dependencies inside an iso..
https://leetcode.com/problems/kth-largest-element-in-a-stream/description/ stream 안에서 k번째 큰 숫자를 찾는 문제인데 stream이라는 건 숫자를 계속해서 추가할 수 있다는 의미다. 이걸 효율적으로 찾을 수 있도록 하는 자료구조가 있는가?있다. 바로 Min Heap of size K. Min heap에서 log(N) 만에 add or pop 할 수 있다.최솟값은 O(1) 만에 찾을 수 있다. Max Heap 대신에 Min heap을 사용하는 이유는? 여기서는 값을 remove 하지 않고 추가만 한다. [4, 5, 8, 2]라는 숫자 배열이 있고 k가 3일 때 while the size of the loop is greater than k..
https://leetcode.com/problems/longest-substring-without-repeating-characters/description/ character가 반복되지 않는 가장 긴 substring의 길이를 구하는 문제다. left pointer와 right pointer를 이용했다. 처음에는 lp와 rp가 당연히 0 index를 가리키고 있다.이제 string s의 character를 하나씩 훑고 지나갈 것이다. s = "tmmzuxt"라는 string이 있다고 하자.rp 가 처음에 0이므로 s[rp] = "t"이다. character를 담는 딕셔너리를 만들어줬다. 딕셔너리의 key는 character이고, value는 right pointer의 index다.딕셔너리에 우선 c..
중복순열N = 2 # 주사위 던지는 회수numbers = [0 for _ in range(N)]# 중복 순열def dice1(cnt): if cnt == N: print(numbers) return for diceNum in range(1, 6+1): numbers[cnt] = diceNum dice1(cnt+1)dice1(0) 순열N = 3 # 주사위 던지는 회수numbers = [0 for _ in range(N)]isSelected = [False for _ in range(6+1)]# 순열def dice2(cnt): if cnt == N: print(numbers) return for diceNum i..
1. 컴퓨터 구조를 알아야 하는 이유개발자는 프로그래밍 언어, 그 언어의 문법 뿐만 아니라 컴퓨터의 근간을 알아야 한다.컴퓨터의 근간을 알게 되면 2가지 효과를 얻을 수 있다. 첫 번째 문제 해결 능력과 둘째는 성능, 용량, 비용을 고려한 프로그래밍이 가능해진다. 클라우드 서비스를 사용할 때 CPU, 메모리, 저장용량을 선택해야 한다. 컴퓨터 구조는 결국 성능, 용량, 비용에 대한 이야기이다. 2. 컴퓨터 구조의 큰 그림컴퓨터 구조에서는 크게 2가지 갈래를 배운다.하나는 컴퓨터가 이해하는 (2가지) 정보이고, 다른 하나는 컴퓨터의 네 가지 핵심 부품이다. 컴퓨터가 이해하는 정보모든 프로그램들은 결국 2가지 정보로 이루어져 있다. 데이터와 명령어이다. 컴퓨터가 이해하는 두 가지 정보 중 하나인 데이터-..
1. 네트워크를 알아야 하는 이유네트워크란? 두 대 이상의 장치가 연결되서 서로 정보를 주고받을 수 있는 통신망을 의미한다. 대부분의 프로그램은 네트워크를 이용한다.개발자는 프로그램을 만든다.따라서 프로그램을 만드는 개발자는 네트워크를 알아야 한다. 개발자 업무에 있어 네트워크 지식은 구체적으로 언제 사용하게 될까?개발자 업무는 크게 프로그램을 만드는 업무와 프로그램을 유지 보수하는 업무로 나뉜다. 두 가지 업무 모두에서 도움이 된다. 채용 공고에서도 네트워크에 관련한 기초 지식을 보유하신 분이라고 쓰여져 있는 경우가 많다. 2. 네트워크 거시적으로 살펴보기네트워크의 기본 구조네트워크의 분류 네트워크의 기본 구조네트워크의 기본 구조는 그래프 형태이다. 그래프는 노드(정점)와 간선(링크)의 연결로 표현되는..
prefix를 담은 tree를 trie ('트라이')라고 한다. 자동 완성이나 스펠링 체크를 할 때 쓰이는 알고리즘이다. 트라이를 구현해보자. class TrieNode: def __init__(self): self.children = {} self.endOfWord = Falseclass Trie(object): def __init__(self): self.root = TrieNode() def insert(self, word): cur = self.root for c in word: if c not in cur.children: # 만약 c가 자식 노드에 없다면 cur.chil..
이진트리에서 맨 오른쪽에 있는 노드의 값만 리턴하는 문제이다.https://leetcode.com/problems/binary-tree-right-side-view/description/ 각 레벨에서 맨 오른쪽에 있는 노드들인 것을 알 수 있다.BFS로 레벨 순회를 하면서 맨 마지막 인덱스의 값(val)을 배열에 넣어줄 것이다. class Solution(object): def rightSideView(self, root): result = [] if not root: return result queue = [root] while queue: level = len(queue) ..