[코드트리 챌린지] 8주차_8주간의 여정을 마치며

martha·2023년 10월 30일

🖋️ 8주차 실력진단 결과



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

📁 8주차에 학습한 내용



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

🗝️ 정수 명령 처리 8

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를 만들어서 해당 문제를 풀어야 한다. 확실히 알고리즘 이론에 돌입할수록 파이썬 언어에 대한 심화적인 학습이 부족함을 느꼈던 지점.

📍 8주간의 여정을 마친 소감과 향후 계획

  • 완벽하게는 못 하더라도 일단은 하자!는 생각으로 시작했던 챌린지였는데 부족한 포스팅이었지만 8주간의 챌린지를 진행하기 위해 매일 조금이나마 학습을 수행하게 되어 뿌듯함을 느꼈다.
  • 그간 배웠던 내용이나 이해가 어려웠던 내용에 대해서는 추가적인 학습을 통해 정리하고 블로그에 공유할 예정
  • 프로그래머스, 백준, 리트코드를 적극 활용해서 실력을 키울 것!
profile
KNOU Computer Science major

0개의 댓글