시작하기에 앞서 나는 블로그를 작성하는 것이 익숙해지기 전까지 TIL을 "Today I Learned"가 아닌 "This week I Learned"로 정의하고 매주 최소 한 번씩 기록해보려고 한다.
지난 주 Python EDA 팀 프로젝트를 마치고 이번주는 자료구조 및 알고리즘 개론 대한 수업을 들었다.
이번 과정에서는 모든 자료구조와 알고리즘을 커버하기 보다 실제 코딩테스트에 자주 출제되는 부분들 위주로 수업이 진행되었다.
LIFO (Last In First Out)
가장 마지막에 삽입된 자료가 가장 먼저 삭제됨
주요 코드 :
# 데이터 삽입
stack.append(data)
# 데이터 삭제
stack.pop()
Leetcode - Valid Parenthesis (Stack 문제1)
Leetcode - Daliy Temperature (Stack 문제2)
# dictionary 선언 및 데이터 추가
dict = {}
dict['key] = value
Leetcode - Two Sum (Dictionary 문제)
def preorder(root):
if root is None:
return
print(root)
preorder(root.left)
preorder(root.right)
def preorder(root):
if root is None:
return
inorder(root.left)
print(root)
inorder(root.right)
def postorder(root):
if root is None:
return
postorder(root.left)
postorder(root.right)
print(root)
matrix = [
[0, 1, 0, 0, 0, 0],
[1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 0],
[0, 0, 1, 0, 1, 1],
[0, 1, 0, 1, 0, 1],
[0, 0, 0, 1, 1, 0],
]
graph = {
"A": ["B"],
"B": ["A", "C", "E"],
"C": ["B", "D"],
"D": ["C", "E", "F"],
"E": ["B", "D", "F"],
"F": ["D", "E"],
}
graph = [
[1, 1, 1, 1, 1],
[0, 0, 0, 1, 1],
[1, 1, 0, 1, 1],
[1, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
]
Leetcode - Keys and Rooms (BFS/DFS 문제1)
Leetcode - Shortest Path (BFS/DFS 문제2)
Leetcode - Number of Island (BFS/DFS 문제3)
Leetcode - Climbing Stairs (DP 문제1)
Leetcode - Min Cost Climbing Stairs (DP 문제2)
Leetcode - Unique Paths (DP 문제3)
알고리즘 수업이 3일이라는 짧은 기간동안 진행되었던 만큼, 많은 내용을 단기간에 학습하기는 쉽지 않았다. 그래도 코테를 준비해 본 경험이 있었기 때문에 개념을 익히는 부분은 많이 힘들지는 않았다. (그저 10시~19시 풀 실시간 수업이라는게 체력적으로 많이 힘들었을 뿐...)
우선 혼자 공부할 때는 특히 BFS, DFS, DP의 개념은 이해가 갔으나 매번 적용이 쉽지 않았다. 문제에 어떻게 접근해야할지 조차 모르겠다는 생각이 강해서 포기 수준으로 손대지 않고 있었다. 그러나 강사님께서 문제들마다 다양한 접근 방법을 알려주시고 같이 풀이도 해주셔서 완벽히는 아니지만 어느정도 감이 잡힌 것 같다. 그 증거로 수업시간에 내주신 leetcode 문제들은 전부 풀 수 있었다.
코테는 꾸준히 연습하지 않으면 감을 빨리 잃게 되기 때문에 앞으로도 매일 한 문제씩 꾸준히 연습할 것이다.
코테가 코딩 실력의 전부는 아니지만 코테를 통과하지 못한다면 면접의 기회조차 없기 때문에 절대 소홀히 하면 안된다.