학생들을 가르치다 보면 나를 지치게 하는 것 중 하나가 지난 시간에 가르쳐준 내용을 기억하지 못하는 것이다. 그런데 돌이켜 보면 "나는 예전에 한번 배운걸 모두 기억하고 있었나?" 하는 생각이 든다.
인간을 약속할 수 있는 존재로 만드는 것. 이것을 니체는 인간에게 부여된 '역설적' 과제이자, 인간에 관한 '본래적인' 문제로 이해한다. 약속할 수 있는 존재란 그 자신의 사고와 행위가 일정정도 산정 가능한 존재다. 즉 그 자신의 사고와 행위를 예측할 수 있고, 그것들을 일정정도 규칙적이며 필연적인 것으로 이해하는 존재다. 이런 존재가 되기 위해서 인간은 자신에게 있는 자연적인 힘, 즉 망각의 힘을 제거해야 한다. 즉 자신의 사고와 행위를 기억할 필요가 있는 것이다.
인간은 본성상 망각하는 동물인 것이다. 망각은 결코 이성능력의 부족이나 타성력이 아니라, 삶에 필요하고 삶을 가능하게 하는 힘이다. 그것이 의식 이전에 발생하는 욕구나 충동들의 모순과 대립의 과정들에 대한 정보를 차단할 뿐만 아니라, 프로이트가 억압(Verdrängung)이라는 단어로 말했던 것처럼 고통스러운 기억을 밀어내어 정신적 질서와 안정을 찾게 하는 기능을 하기 때문이다. 이 장치에 의해 인간은 행복감과 건강함을 느끼게 된다. 이러한 자연적이고도 동물적인 망각의 힘은 '의지의 기억'에 의해 제거된다.
- 망각 (니체 『도덕의 계보』 (해제), 2005., 백승영)
def dfs(graph, v, visited):
visited[v] = True
for nv in graph[v]:
if not visited[nv]:
dfs(graph, nv, visited)
from collections import deque
def bfs(graph, start):
visited = [False]*len(graph)
q = deque([start])
visited[start] = True
while q:
v = q.popleft()
for nv in graph[v]:
if not visited[nv]:
visited[nv] = True
q.append(nv)
visited는 큐에 넣을 때 체크def binary_search(arr, target):
left, right = 0, len(arr)-1
while left <= right:
mid = (left+right)//2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid+1
else:
right = mid-1
left <= right 종료 조건, mid 계산 주의import heapq
def dijkstra(graph, start):
dist = [float('inf')]*len(graph)
dist[start] = 0
heap = [(0, start)]
while heap:
d, now = heapq.heappop(heap)
if d > dist[now]:
continue
for cost, nxt in graph[now]:
nd = d + cost
if nd < dist[nxt]:
dist[nxt] = nd
heapq.heappush(heap, (nd, nxt))
if d > dist[now]: continue 필수def find(parent, x):
if parent[x] != x:
parent[x] = find(parent, parent[x])
return parent[x]
def union(parent, a, b):
ra, rb = find(parent, a), find(parent, b)
if ra < rb:
parent[rb] = ra
else:
parent[ra] = rb
dp = [0]*(n+1)
dp[0] = 초기값
for i in range(1, n+1):
dp[i] = min(dp[i-1]+cost, ...)
left = 0
s = 0
for right in range(n):
s += arr[right]
while s > target:
s -= arr[left]
left += 1
prefix = [0]
for num in arr:
prefix.append(prefix[-1]+num)
# 구간 합
res = prefix[r]-prefix[l-1]
import heapq
min_heap = []
heapq.heappush(min_heap, x)
heapq.heappop(min_heap)
# 최대 힙
heapq.heappush(min_heap, -x)
val = -heapq.heappop(min_heap)
def backtrack(path):
if 조건:
결과저장
return
for i in range(시작, 끝):
if not visited[i]:
visited[i] = True
path.append(i)
backtrack(path)
path.pop()
visited[i] = False
from collections import deque
def topology_sort(graph, indegree):
q = deque()
for i in range(len(indegree)):
if indegree[i] == 0:
q.append(i)
while q:
now = q.popleft()
for nxt in graph[now]:
indegree[nxt] -= 1
if indegree[nxt] == 0:
q.append(nxt)
def preorder(v):
print(v)
preorder(left[v])
preorder(right[v])