일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- DFS알고리즘
- 연결리스트
- 알고리즘
- Korean-NLP
- 파이썬
- 백준알고리즘2920번
- 시간복잡도
- package-install
- 자료구조
- FastCampus
- 시나공정보처리기사
- 해쉬테이블
- 작심삼개월
- 코딩테스트
- 퀵정렬
- AIFFEL
- 트리구조
- 내돈내산
- 인강
- Ai
- 프림알고리즘
- 환급챌린지
- BFS알고리즘
- 1주차완료
- 코딩테스트대비
- 패스트캠퍼스
- 코딩테스트인강
- nqueen
- 크루스칼알고리즘
- 최단거리알고리즘
- Today
- Total
DevLog
[패스트캠퍼스 :: 코딩테스트 인강] 2주차 ① 연결리스트/링크드리스트 본문
알고리즘/기술면접 완전 정복 올인원 패키지 Online
11. 링크드 리스트 (Linked List) - 1
12. 링크드 리스트 (Linked List) - 2
13. 링크드 리스트 (Linked List) - 3
잠시 노가리 TMI
사실 나는 지금 수강하고 있는 강의를 유튜브에서도 유명한 '나동빈'님이 강사에 포함되어 있어서
(물론 이미 코딩 테스트 관련 영상이 유튜브 채널에 업로드되어있지만 유료 강의는 또 뭐가 다를까 궁금하기도 했다.)
수강을 결정하고, 지금 100% 환급 챌린지도 진행하게 되었다.
근데 진짜 진심으로 이 글을 패스트캠퍼스 관계자가 볼 수도 있고, 해당 강사님이 볼 수도 있겠지만...
지금 이 시점에서 강의를 해주시는 (강사 세 분 중 한 분) '이준희' 강사님이 너무 마음에 들고 아주 아주 만족스럽다는 글을 꼭 남기고 싶었다. 알고 있는 사람도 있을 것이고, 이 분도 직접 사이트(?)를 운영하고 계신 것 같은데 자료를 봤을 수도 있을 것 같다.
솔직히 처음에 1강을 열고, 첫인상은 나이가 지긋해 보이셔서 '어라 교수님 스타일이려나...'라는 걱정에 지루하면 어쩌지 라는 생각을 했었는데 역시 걱정은 사서 하는 것이 아닌 것 같다.
물론 개인차가 있겠지만 내 기준 너무 재밌고, '하 조금 어려..우...'라는 생각을 함과 동시에 강의 영상에서 "네 어렵죠? 저도 어렵습니다. 저도 처음에는 몇 시간씩 걸렸습니다." 등 마음을 따스하게(?) ㅋㅋㅋㅋ 해주시는 말들을 어찌나 타이밍 좋게 해 주시는지....
아무튼 혹시나 강의를 고민하고 있거나 첫 맛보기 강의를 보고 지레 겁먹는 사람이 있다면,
그 걱정은 고이 접어서 일단 주머니에 넣고 공부를 시작했으면 좋겠다!
연결 리스트 / 링크드 리스트 (Linked List)
필요 선수 지식 : 배열, 파이썬 객체지향 프로그래밍, 함수 정의, class 정의, 매개변수
-
배열은 순차적으로 연결된 공간에 데이터를 나열하는 데이터 구조이다.
-
링크드 리스트는 배열의 단점을 보완하기 위해 떨어진 곳에 존재하는 데이터를 포인터로 연결해서 관리하는 데이터 구조이다.
-
기본 구조 : 노드 + 포인터
-
장점은 기본 배열과는 달리 데이터 공간을 미리 할당하지 않아도 되는 점이다.
-
단점은 배열의 단점을 보완해서 데이터 저장공간도 보완이 되었다고 생각할 수 있지만 연결 리스트 특성상 데이터와 포인터가 하나의 노드에 포함되어야 하기 때문에 효율이 높지 않다.
-
또한, 배열에서는 인덱스 기법으로 포함하는 원소의 위치에 빠르게 접근이 가능했지만 연결 리스트에서는 포인터를 활용하여 하나하나 원소를 찾아가야 하기 때문에 속도가 느리다.
위의 그림에 나오는 것처럼 Node / data / next는 연결 리스트 관련 함수를 정의할 때도 사용하게 된다.
class Node: # Node 객체를 생성하기 위한 class 정의
def __init__(self, data, next=None):
self.data = data # 데이터
self.next = next # 포인터
class NodeMgmt: # Node 관련 Management 함수 정의 위한 클래스
def __init__(self, data): # 초기값 정의
self.head = Node(data)
def add(self, data): # 연결리스트 삽입
if self.head == '':
self.head = Node(data)
else:
node = self.head
while node.next:
node = node.next
node.next = Node(data)
def desc(self): # 전체 연결리스트 출력
node = self.head
while node:
print (node.data)
node = node.next
def delete(self, data): # 연결리스트 삭제
if self.head == '':
print ("해당 값을 가진 노드가 없습니다.")
return
if self.head.data == data:
temp = self.head
self.head = self.head.next
del temp
else:
node = self.head
while node.next:
if node.next.data == data:
temp = node.next
node.next = node.next.next
del temp
return
else:
node = node.next
연결 리스트 개념에서 활용되는 함수를 정의한 코드이다.
이번 강의를 통해 매번 헷갈렸던 연결 리스트 자료구조를 거의 90% 이상 이해를 할 수 있게 되었다.
아직 완벽하게 혼자 코드를 짜는 것은 버벅거림이 없지 않아 있지만,
계속 계속해 볼 예정이다.
개념이 잡혔으니 생각하면서 코드를 작성해 보고 이게 또 기계적으로 될 수 있게 반복이 답인 것 같다.
프로그래밍은 반복 또 반복이 답이란 것을 매일 느낀다.
겁나던 연결 리스트를 해내고 나니 또 뒷 걱정이 생기긴 하지만
강사님께서 마지막에 하신 '지금 연결 리스트를 듣고 강의를 접을 생각을 하실 수도 있지만...'에서 조금 뜨끔했다.
근데 뒤이어 '여기까지 하시면 앞으로도 잘할 수 있다' 고 용기를 주셨다. ^___^
해보자.
[패스트캠퍼스 100% 환급 챌린지 미션 중입니다.]
'IT 개발 > Algorithm 알고리즘' 카테고리의 다른 글
[패스트캠퍼스 :: 코딩테스트 인강] 3주차 ① 해쉬 테이블 (0) | 2021.03.03 |
---|---|
[패스트캠퍼스 :: 코딩테스트 인강] 2주차 ② 연결리스트/더블 링크드리스트 (0) | 2021.02.28 |
[패스트캠퍼스 :: 코딩테스트 인강] 1주차 ② 배열, 큐, 스택 (0) | 2021.02.21 |
[패스트캠퍼스 :: 코딩테스트 인강] 1주차 ① OT 겸 환경 설정 (0) | 2021.02.21 |
[패스트캠퍼스 :: 내돈내산] 100% 환급 챌린지 미션 시작! (0) | 2021.02.18 |