ProblemSolving

패스트캠퍼스 Python 코딩테스트 강의 1주차

elisom 2023. 4. 23. 23:15

 

개발자 취업 합격 패스 with 코딩테스트, 기술면접

 

패스트캠퍼스 Python 코딩테스트 강의 [개발자 취업 합격 패스 with 코딩테스트, 기술면접]를 수강하며 정리한 글입니다🤓

 

Content

1주차 수강한 내용을 정리하기에 앞서, 이 강의를 수강하기로 결정한 이유를 말해보자면

6개의 챕터의 다양한 내용으로 구성되어 있기 때문이었다.

 

Chapter 1. 자료구조 이론 - 10h

Chapter 2. 알고리즘 이론 - 12.5h

Chapter 3. 코딩테스트 문제 풀이 - 21h

Chapter 4. 실전 코딩테스트 문제 풀이 - 9h

Chapter 5. 기술 면접 & CS 지식 - 19h

Chapter 6. 네카라쿠배 합격자 노하우 - 11h

 

대략 총 83시간이다.. 하루에 3시간씩 성실히 듣는다면 1달이 걸리겠어요.,

강의 내용도 풍부하길 기대합니다🥺

 

1주차에는 Chapter 1. 자료구조 이론을 수강했다.

OT에서

프로그래밍은 작은 원리를 적용하는 방법을 익히고, 연습을 통해 익숙해져야 함

이라고 말하셨는데, 완전히 동의했다.

조급해하지 말고 차근차근 정도를 걸어야지

 

챕터 1 강사님 오리엔테이션을 들어보니 컴퓨터 공학 지식을 잘 알고 계신 것을 넘어,

교육 방법과 효과에 대해 고민을 많이 하시는 분이라고 느껴졌다.

초보들을 위해 가능한 찬찬하고 쉽게 과외받듯이 모든 지식을 설명할 것이기 때문에 배속을 높여 들으라고 추천하셨음.

 

자료구조 이론 강의는 배열, 큐, 스택, 링크드리스트부터 구성되었다.

 

배열 List

특이사항 없음

 

큐 Queue

 FIFO (First In First Out) - Stack과 꺼내는 순서가 반대임

Enqueue, Dequeue

 

일반적인 FIFO Queue

 

변형된 LIFO Queue

 

PriorityQueue - 데이터를 넣은 순서가 아닌, 우선순위에 따라 동작하는 우선순위 큐

숫자가 낮은 것이 우선순위가 높은 것

 

Queue 활용 예시: multi-tasking을 위한 프로세스 스케줄링 방식

 

스택 Stack

한쪽 끝에서만 자료를 넣거나 뺌. LIFO (Last In First Out)

Push, Pop

데이터 최대 갯수를 미리 정해야 하고, 저장 공간 낭비가 있을 수 있다는 단점 존재

Stack 활용 예시: 함수 호출 시 프로세스 실행구조. ex) 재귀함수

 

링크드 리스트 Linked List

미리 공간을 예약해야 한다는 배열의 단점을 극복한 자료 구조

Node: 데이터 저장 단위, (값, 포인터)로 구성

Pointer: 각 노드에서, 다음 또는 이전의 노드의 주소를 가지고 있는 공간

 

미리 데이터 공간을 할당하지 않아도 된다는 장점,

포인터 저장 공간이 필요하므로 저장공간 효율이 낮음

연결 정보를 찾는 시간이 필요하므로 접근 속도가 느림

중간 데이터 삽입 및 삭제 시, 앞과 뒤 데이터를 연결을 재구성해야 하는 부가적 작업 필요의 단점 존재

 

Linked List 중간에 값 삽입하기

 

Linked List 값 삭제하기

이 경우에는 세가지 케이스가 있음.

1. head 삭제

2. 마지막 node 삭제

3. 중간 node 삭제

이 중 2, 3번 케이스는 따로 구현할 필요 없음ㅎㅎ

잘 구현되었는지 확인도 해봅니다

잘 됐군요🤓

 

앞서 Queue에서 다룬 것처럼, Linked List도 변경된 정책들이 다양하게 존재함.

 

Double Linked List

Linked List의 단점: 어떤 데이터를 찾으려 하든 항상 가장 앞의 head부터 검색해야 함

LinkedList의 단점을 개선하고자 head뿐만 아니라 뒤에서부터도 찾을 수 있는 구조

허나 매우 복잡하다는 단점이 있다🤨

 

search 함수를 구현할 때도 앞에서부터, 뒤에서부터..

insert 함수를 구현할 때도 앞에서부터, 뒤에서부터..

그래도 연습하고자 일부분만 구현해 보자면

class Node:
    def __init__(self, data, prev=None, next=None):
        self.prev = prev
        self.next = next
        self.data = data

class NodeMgmt:
    def __init__(self, data):
        self.head = Node(data)
        self.tail = self.head
        
    def insert(self, data):
        if self.head == None:
            self.head = Node(data)
            self.tail = self.head
        else:
            node = self.head
            while node.next:
                node = node.next
            new = Node(data)
            new.prev = node
            node.next = new
            self.tail = new
    
    def desc(self):
        node = self.head
        while node:
            print(node.data)
            node = node.next
    
    def search_from_head(self, data):
        if self.head == None: # 방어 코드
            return False
        
        node = self.head
        while node:
            if node.data == data:
                return node
            else:
                node = node.next
        return False
        
    def search_from_tail(self, data):
        if self.head == None: # 방어 코드
            return False
        
        node = self.tail
        while node:
            if node.data == data:
                return node
            else:
                node = node.prev
        return False
    
    def insert_before(self, data, before_data):
        if self.head == None:
            self.head = Node(data)
            self.tail = self.head
            return True
        else:
            node = self.tail
            while node.data != before_data:
                node = node.prev
                if node == None:
                    return False
                
            new = Node(data)
            before = node.prev
            
            before.next = new
            new.prev = before
            new.next = node
            node.prev = new
            
            return True

(아닛,,, 왜 python의 생명인 들여 쓰기가 없어져 보이는 거죠…🤯)

 

잘 구현되었는지 확인해 보면

search_from_tail() 테스트
insert_before() 테스트

잘 되었습니다😎

 

Link

https://fastcampus.co.kr/dev_online_devjob

 

개발자 취업 합격 패스 With 코딩테스트, 기술면접 초격차 패키지 Online. | 패스트캠퍼스

전문가의 코딩테스트 풀이 강의, 기술면접 합격 수준 답안 강의, 네카라쿠배 합격자의 극비 노하우까지 빠짐없이 담았습니다.

fastcampus.co.kr

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

#패스트캠퍼스 #패캠 #FASTCAMPUS #자바 #자바스크립트 #파이썬 #코딩테스트 #패스트캠퍼스후기 #코딩교육 #코딩자격증