목록분류 전체보기 (163)
거누의 개발노트
문제 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다. 3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 남는 카드는 4가 된다. N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 프로..
HDD, SSD를 설명하기 전에!! 컴퓨터에서 정보를 저장하는 메모리는 크게 휘발성 메모리와 비 휘발성 메모리로 분류를 합니다. 휘발성 메모리? 비 휘발성 메모리? 휘발성 메모리 전원이 꺼지면 저장된 데이터가 사라진다. 대표적으로 RAM 비 휘발성 메모리 전원이 꺼져도 저장된 데이터가 사라지지 않는다. → 보조기억장치(HDD, SSD) 그래서? HDD(Hard Disk Drive) 하드 디스크 드라이브(HDD)는 비 휘발성 기억장치로, 자기장의 원리로 정보를 저장합니다. 금속 케이스 안에 원판이 있습니다. 이 원판 위에 정보를 기록하는 것이기 때문에, 물리적인 손상을 입으면 정보도 손상됩니다. 원판은 흔들려도 손상 될 수 있다고 함, 그래서 금속 케이스에 넣어둔거임! SSD(Solid State Driv..
문제 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라. 입력1 8 4 3 6 8 7 5 2 1 출력1 + + +..
문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다. 여러분은 입력으로 주어진 괄호 문자열..
문제 매일의 화씨 온도 리스트 T를 입력받아서, 더 따뜻한 날씨를 위해서는 며칠을 더 기다려야 하는지를 출력하라 입력 T1 = [73,74,75,71,69,72,76,73] 출력 [1, 1, 4, 2, 1, 1, 0, 0] 작성한 코드 - 이중 for 문 def daily_temperatures1(T): t = [0]*len(T) count = 0 # 이중 for 문 for i in range(len(T)): count = 0 for j in range(i+1,len(T),1): # 카운팅 하다가 count += 1 # 다음 온도가 클 때 if T[i] < T[j]: t[i] = count break return t 리코드에서 시간 초과가 나왔다. - 스택을 이용해서 풀어 보자 책에 있는 코드 def ..
문제 중복된 문자를 제외하고 사전식 순서로 나열하라. 입력 s1 = 'bcabc' s2 = 'cbacdcbc' 출력 r1 = 'abc' r2 = 'acdb' 작성한 코드 def removeDuplicateLetters(s: str) -> str: counter = collections.Counter(s) stack = [] seen = set() for char in s: counter[char] -= 1 if char in seen: continue # 1. stack 안에 값이 존재하는지 # 2. char 값보다 스택 top에 있는 값이 크면 # 3. 스탭 top의 숫자가 0보다 크면 while(stack and char 0): # ..
문제 괄호로 된 입력값이 올바른지 판별하라. 입력 '()[]{}' 출력 True 스택으로 풀이 def isValid(s: str) -> bool: if len(s) % 2 != 0: return False default = { ')':'(', ']':'[', '}':'{' } open = '({[' stack = [] for i in s: if i in opedn: stack.append(i) else: if not stack: return False if default.get(i) != stack.pop(): return False return not stack 리코드에서 확인 https://leetcode.com/problems/valid-parentheses/ Valid Parentheses - L..
문제 연결 리스트를 뒤집어라 입력 1->2->3->4->5->NULL 출력 5->4->3->2->1->NULL 작성한 코드 def reverseList(head): node, prev = head, None while node: # 1 2 3 next = node.next # 2 3 node.next = prev # Null 1 prev = node # 1 2 node = next # 2 3 return prev 책에 있는 코드 def reverseList(self, head) -> ListNode: # SOL 1) Recursive Way def reversef(node, prev=None): if not node: # node가 비어있는 경우 return prev next, node.next = n..