

실력진단 결과는 지난 주차와 동일하다. 이번 주차는 Novice Mid 문제가 어렵게 느껴져서 Novice High 커리큘럼을 따라서 알고리즘에 대한 개념 위주의 학습을 진행하였는데, 이전부터 느껴 왔지만 이론에 대해 설명할 때 기본 개념에 대한 설명이 다소 부족하게 느껴져서 아쉬움이 느껴지는 부분. 그렇지만 설명하는 개념에 맞게 기본적인 코드를 작성할 수 있는 실습을 제공하는 부분이 만족스러웠다. 기본 개념에 대한 커리큘럼이 리트코드처럼 앞으로 좀 더 체계적으로 보완되었으면 하는 작은 바람이 있다. 조만간 리트코드 프리미엄도 함께 구매해서 부족한 이론을 좀 더 보충할 예정.


서론에서 밝혔듯이 기본적인 이론 위주로 학습을 진행했는데, 이번 학기 자료구조 수업과 조만간 구매할 리트코드 프리미엄의 커리큘럼을 활용해서 학습했던 내용을 별도로 정리할 예정.

class Node:
def __init__(self, data):
self.data = data
self.next = None
self.prev = None
class LinkedList:
def __init__(self):
self.head = None
self.tail = None
self.size = 0
def push_front(self, data):
new_node = Node(data)
if not self.head:
self.head = self.tail = new_node
else:
new_node.next = self.head
self.head.prev = new_node
self.head = new_node
self.size += 1
def push_back(self, data):
new_node = Node(data)
if not self.head:
self.head = self.tail = new_node
else:
new_node.prev = self.tail
self.tail.next = new_node
self.tail = new_node
self.size += 1
def pop_front(self):
if self.head:
value = self.head.data
self.head = self.head.next
if self.head:
self.head.prev = None
else:
self.tail = None
self.size -= 1
return value
def pop_back(self):
if self.tail:
value = self.tail.data
self.tail = self.tail.prev
if self.tail:
self.tail.next = None
else:
self.head = None
self.size -= 1
return value
def get_size(self):
return self.size
def is_empty(self):
return 1 if self.size == 0 else 0
def get_front(self):
return self.head.data if self.head else None
def get_back(self):
return self.tail.data if self.tail else None
def main():
N = int(input())
sll = LinkedList()
for _ in range(N):
command = input().split()
if command[0] == "push_front":
sll.push_front(int(command[1]))
elif command[0] == "push_back":
sll.push_back(int(command[1]))
elif command[0] == "pop_front":
print(sll.pop_front())
elif command[0] == "pop_back":
print(sll.pop_back())
elif command[0] == "size":
print(sll.get_size())
elif command[0] == "empty":
print(sll.is_empty())
elif command[0] == "front":
print(sll.get_front())
elif command[0] == "back":
print(sll.get_back())
if __name__ == "__main__":
main()
이중 연결 리스트를 구현해서 풀어야 하는 문제로, 파이썬에서는 이중 연결 리스트를 구현하는 구현체인 list class가 존재하지 않으므로 직접 class를 만들어서 해당 문제를 풀어야 한다. 확실히 알고리즘 이론에 돌입할수록 파이썬 언어에 대한 심화적인 학습이 부족함을 느꼈던 지점.