array = [i for i in range(10)]
→ 기본array = [i for i in range(20) if i % 2 == 1]
→ 홀수array = [i * i for i in range(1, 10)]
→ 제곱값from collections import deque
를 사용하자binary search
시작점
, 끝점
, 중간점
(인덱스)을 이용하여 탐색 범위를 설정한다.import sys
n = int(sys.stdin.readline())
A = sorted(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
targets = map(int, sys.stdin.readline().split())
def binary(A, target, start, end):
if start > end:
return 0
mid = (start + end) // 2
if target == A[mid]:
return 1
elif target < A[mid]:
return binary(A, target, start, mid - 1)
else:
return binary(A, target, mid + 1, end)
for target in targets:
start = 0
end = len(A) - 1
print(binary(A, target, start, end))
A
targets
start > end
가 됨Two Pointers
import sys
n = int(sys.stdin.readline())
arr = list(map(int, sys.stdin.readline().split(' ')))
arr.sort()
left = 0
right = n - 1
answer = 2000000001 # 나올 수 있는 최대의 합
final = []
while left < right:
s_left = arr[left]
s_right = arr[right]
total = s_left + s_right
if abs(total) < answer:
answer = abs(total)
final = [s_left, s_right]
if total < 0:
left += 1
else:
right -= 1
print(final[0], final[1])
deque
appendleft()
popleft()
deque(maxlen=n)
heapq 모듈
heapq
내장 모듈이 파이썬에 있다.heapq
모듈은 이진 트리(binary tree) 기반의 “최소 힙(min heap)” 자료구조를 제공한다.heap[k] ≤ heap[2*k+1] and heap[k] ≤ heap[2*k+2]
import heapq
heap = []
이렇게 리스트를 생성하고 heapq
모듈을 통해 원소를 추가하거나 삭제하면 heap
이 그냥 최소 힙이 된다.heapq.heappush(heap, 4)
heap
에 4를 추가heap
이 자동으로 정렬된다.heapq.heappop(heap)
heapq.heapify(heap)
heapq
모듈은 최소 힙 기능만을 동작하기 때문에 최대 힙으로 활용하려면 약간의 요령이 필요하다.우선순위 큐
1.5 - 캐시가 중요하다
반도체 기술의 발달로 인한 프로세서와 메모리 간 격차에 대응하기 위해 시스템 설계자는 보다 작고 빠른 캐시메모리(간단한 캐시)라고 부르는 저장장치를 고안하여 프로세서가 단기간에 필요로 할 가능성이 높은 정보를 임시로 저장할 목적으로 사용한다.
캐시 메모리
1.6 - 저장장치들은 계층구조를 이룬다
메모리 계층구조
출처 - https://velog.io/@emplam27/CS-컴퓨터-시스템-1.51.7장-캐시-메모리-운영체제
계층의 꼭대기에서부터 맨 밑바닥까지 이동할수록 저장장치들은 더 느리고, 더 크고, 바이트당 가격이 싸짐.
메모리 계층구조의 주요 아이디어는 한 레벨의 저장장치가 다음 하위레벨 정장치의 캐시 역할을 한다는 것. → L1과 L2의 캐시는 각각 L2, L3의 캐시다.
1.7 - 운영체제는 하드웨어를 관리한다
참고 - 컴퓨터 시스템(Coputer Systems A Programmer's Perspective 3rd)
Counter
는 리스트를 값으로 주게 되면 해당 원소들이 몇 번 등장했는지 세어 딕셔너리 형태로 반환.bisect 모듈
bisect
는 파이썬에 내장되어있는 이진탐색 모듈bisect_left(list, value)
는 list에서 value가 들어갈 가장 왼쪽 인덱스 반환bisect_right(list, value)
는 list에서 value가 들어갈 가장 오른쪽 인덱스 반환BOJ 10816 숫자 카드 2 - 해시(Hash)풀이
import sys
n = stdin.readline().rstrip()
card = list(map(int,stdin.readline().split()))
m = stdin.readline().rstrip()
test = list(map(int,stdin.readline().split()))
hash = {}
for i in card:
if i in hash:
hash[i] += 1
else:
hash[i] = 1
for i in test:
if i in hash:
print(hash[i], end=' ')
else:
print(0, end=' ')
WEEK02 시험은 한 문제도 구현하지 못했다. 학습의 속도를 높이기위해 확실하게 이해하지 않고 넘어간게 문제였다. WEEK03에서는 한 문제 꼭 풀고싶다.
WEEK02 풀었던 문제 소스코드 - https://github.com/yeopto/SW-jungle/tree/main/WEEK02