일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Python Implementation
- 파이썬
- Protocol
- 109. Convert Sorted List to Binary Search Tree
- 운영체제
- 시바견
- Class
- 컴퓨터의 구조
- LeetCode
- 43. Multiply Strings
- 315. Count of Smaller Numbers After Self
- 30. Substring with Concatenation of All Words
- 715. Range Module
- 프로그래머스
- concurrency
- attribute
- kaggle
- Decorator
- shiba
- Generator
- t1
- Python Code
- iterator
- Python
- Substring with Concatenation of All Words
- data science
- 밴픽
- DWG
- Regular Expression
- Convert Sorted List to Binary Search Tree
- Today
- Total
목록Computer Science (392)
Scribbling
1. 메모리 관리 1.1 메모리 관리 시작하기에 앞서, 이 장에서 메모리는 메인메모리를 의미한다. CPU는 메모리에 있는 내용을 가져오거나 작업 결과를 메모리에 저장하기 위하여 메모리 주소 레지스터(MAR)을 사용한다. 폰노이만 구조의 컴퓨터에서는 메모리가 유일한 작업 공간이므로, 모든 프로그램은 메모리에 올라와야 실행 가능하다. 운영체제도 당연히 메모리에 올라와야 실행이 가능하다. 전원 버튼을 누르면 부팅이 이루어지는데, 이 때 하드디스크에 저장된 운영체제가 메모리에 올라간다. 메모리 관리는 운영체제를 비롯하여 여러 프로세스가 동작할 때 메모리를 어떻게 관리하는가에 관한 문제이다. 이는 메모리 관리 시스템(MMS; Memory Management System)이 담당한다. 1.2 컴파일러와 인터프리터 ..
근본 없는 문제다. 도저히 지문을 이해할 수 없게 적어놨다. def solution(prices): answer = [i for i in range(len(prices)-1, -1, -1)] stack = [] for i in range(len(prices)): p = prices[i] if not stack or p >= stack[-1][0]: stack.append((p, i)) else: while stack and stack[-1][0] > p: bef_p, bef_i = stack.pop() answer[bef_i] = i - bef_i stack.append((p, i)) return answer
from collections import deque def solution(bridge_length, weight, truck_weights): time, total_weight = 1, 0 q = deque() truck_weights = deque(truck_weights) while truck_weights: if not q: w = truck_weights.popleft() q.append([time, w]) total_weight += w else: if q[0][0] + bridge_length == time: total_weight -= q[0][1] q.popleft() w = truck_weights[0] if total_weight + w
class Solution: def numTrees(self, n: int) -> int: dp = [0] * (n+1) dp[0] = 1 dp[1] = 1 for i in range(2, n+1): count = 0 for j in range(1, i+1): count += dp[j-1] * dp[i-j] dp[i] = count return dp[n]
# 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 generateTrees(self, n: int) -> List[Optional[TreeNode]]: return self.tree_maker([i for i in range(1, n+1)]) def tree_maker(self, nums): if not nums: return [None] ret = [] for i, num in enumerate(nums): lefts = sel..
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]: new_head = ListNode(val=0, next=head) count = 0 ptr = new_head prev, cur = None, new_head nxt = head for i in range(left): prev = cur cur = nxt nxt = cur...
DFS version class Solution: def isInterleave(self, s1: str, s2: str, s3: str) -> bool: if len(s1) + len(s2) != len(s3): return False self.s1 = s1 self.s2 = s2 self.s3 = s3 self.dp = set() return self.dfs(0, 0, 0) def dfs(self, i, j, k): if (i, j, k) in self.dp: return False if k == len(self.s3): return True if i < len(self.s1) and self.s1[i] == self.s3[k]: if self.dfs(i+1, j, k+1): return True i..
class Solution: def restoreIpAddresses(self, s: str) -> List[str]: self.ret = [] self.nums = set([str(i) for i in range(256)]) self.helper(s, []) return self.ret def helper(self, s, ip): if len(ip) == 4: if not s: self.ret.append('.'.join(ip)) return if not s: return for i in range(min(3, len(s))): if s[:i+1] in self.nums: self.helper(s[i+1:], ip+[s[:i+1]])
class Solution: def numDecodings(self, s: str) -> int: candidates = set([str(i) for i in range(1, 27)]) # dp[i] denotes # of ways until s[i-1] dp = [0] * (len(s) + 1) dp[0] = 1 if s[0] in candidates: dp[1] = 1 for i in range(2, len(s)+1): # dp[n] = dp[n-2] * k2 + dp[n-1] * k1 k2 = 0 if s[i-2:i] in candidates: k2 += 1 k1 = 0 if s[i-1] in candidates: k1 += 1 dp[i] = dp[i-2] * k2 + dp[i-1] * k1 ret..
1. 교착 상태 1.1 교착 상태 임계구역이 존재하면 프로세스 간 상호 배제가 보장되지만, 작업이 더 이상 진행되지 않는 교착 상태에 빠지는 경우가 있다. 이처럼 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태를 교착 상태(Dead Lock)라고 한다. 교착 상태는 아사 현상과는 전혀 다르다. 아사 현상은 운영체제가 잘못된 정책을 사용하여 프로세스의 작업이 크게 지연되는 것을 의미한다. 반면 교착 상태는 여러 프로세스가 진행되는 과정에서 자연적으로 일어난다. 컴퓨터 시스템에서 교착 상태는 시스템 자원, 공유 변수(혹은 파일), 응용 프로그램 등을 함께 사용할 때 발생할 수 있다. 1.2 자원 할당 그래프 자원 할당 그래프(Resource Allocat..