Just Do IT!
스파르타코딩클럽 내일배움캠프 10일차 본문
오늘 일과 간단 요약
- 알고리즘 강의 2주차 완강
- CS 특강
- 알고리즘 특강
- 프로그래머스 Level 0 5문제 (풀이 링크)
알고리즘 강의 요약
클래스
- 같은 속성과 기능을 가진 객체를 총칭하는 개념
- 객체 : 세상에 존재하는 유일무이한 사물
- 클래스를 이용하면 같은 속성과 기능을 가진 객체들을 묶어서 정의할 수 있다
- 클래스에는 생성자(constructor)가 있어 객체를 생성할 때 데이터를 넣어주거나, 내부적으로 원하는 행동을 실행하게 할 수 있다.
- 생성자 : 생성시에 호출되는 함수
- self : 객체 자기 자신 (파라미터를 따로 넣어줄 필요 없이 그냥 호출하면 알아서 self에 자기 자신을 넣어준다)
- self를 통해 객체에 데이터를 쌓을 수 있다
- 메소드(method) : 클래스 내부의 함수
- 파이썬에서 생성자 함수의 이름은 __init__으로 고정되어 있다
링크드 리스트 구현
- 링크드리스트 기본 자료구조
- Node : 데이터와 다음 데이터를 가리키는 주소(포인터)
- Pointer : 각 노드에서 다음 데이터를 가리키는 주소값을 가진다.
- Head : 링크드리스트에서 가장 시작점인 데이터를 의미
- Tail : 링크드리스트에서 가장 마지막 데이터를 의미
- Next=None(또는 Null) : 다음 데이터가 없을 경우 포인터의 주소값은 None(또는 Null)이다
예시
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self, value):
self.head = Node(value)
def append(self, value):
cur = self.head
while cur.next is not None:
cur = cur.next
cur.next = Node(value)
# 모든 원소 출력
def print_all(self):
cur = self.head
while cur is not None:
print(cur.data)
cur = cur.next
def get_node(self, index):
node = self.head
count = 0
while count < index:
node = node.next
count += 1
return node
# 원소 추가
def add_node(self, index, value):
new_node = Node(value)
if index == 0:
new_node.next = self.head
self.head = new_node
return
node = self.get_node(index - 1)
next_node = node.next
node.next = new_node
new_node.next = next_node
# 원소 삭제
def delete_node(self, index):
if index == 0:
self.head = self.head.next
return
node = self.get_node(index - 1)
node.next = node.next.next
linked_list = LinkedList(5)
linked_list.append(12)
linked_list.add_node(0, 3)
linked_list.print_all()
이진 탐색
- 범위의 절반인 50을 시도해보는 방법
- 무작위로 정렬되어 있는 배열에서는 이진 탐색을 사용할 수 없다
- 이진 탐색이 가능한 이유는 한 방향으로 정렬되어 있었기 때문
- 일정한 규칙으로 정렬되어 있는 데이터일 때만 이진 탐색이 가능하다
- 이분탐색을 위해서는 시간 복잡도가 O(logN) 만큼 걸린다.
예제
# 1~16 오름차순으로 정렬되어 있는 배열에서 14가 존재한다면 True, 존재하지 않는다면 False 반환
finding_target = 14
finding_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
def is_existing_target_number_binary(target, array):
current_min = 0
current_max = len(array) - 1
current_guess = (current_min + current_max) // 2
while current_min <= current_max:
if array[current_guess] == target:
return True
elif array[current_guess] < target:
current_min = current_guess + 1
else:
current_max = current_guess - 1
current_guess = (current_min + current_max) // 2
return False
result = is_existing_target_number_binary(finding_target, finding_numbers)
print(result)
재귀 함수
- 재귀(Recursion) : 어떠한 것을 정의할 때 자기 자신을 참조하는 것
- 재귀 함수 : 자기 자신을 호출하는 함수
- 재귀 함수를 이용해서 간결하고 효율성 있는 코드를 작성할 수 있다
- 탈출 조건을 만들어줌으로써 재귀 함수의 반복을 멈출 수 있다.
# 팩토리얼
def factorial(num):
if n == 1:
return 1
return n * factorial(num - 1)
print(factorial(60))
CS 특강
CS 특강은...아이패드에 필기를 해놓았는데
나중에 보니까 이게 뭔말인지 싶어서 ㅋㅋㅋㅋㅋ 주말에 다시 공부해야 할듯 싶다.
이렇게 각잡고(?) CS에 관련해서 공부해본 적이 없어서 1시간이 거의 몇 시간 같았다.
바쁘게 적고 이해하고 했던 것 같은데 TIL 쓰려고 다시 돌아보니 물음표 투성이이다 ㅠㅠ
그나마 어떤 분이 (=인국님) 유튜브에서 한시간 내의 쉽게 이해할 수 있는 CS 특강을 공유해주셔서
아마 다음주나 주말에 그 강의를 보고 다시 복습할 듯 싶다.
솔직히 지금 할 게 너무 많아서 그런가 CS가 뒤로 밀리는 기분이다ㅠ
사실 할 게 너무 많은게 알고리즘 때문이라...일단 이놈부터(?) 해결하고 봐야 할것 같다.
나름 필기 열심히 했는데...공적으로 보여주기 뭔가 민망해서 나중에 정리하고 요기에 링크를 달던지 해야겠다.
프로그래머스 Level 0 5문제
가장 쉬운 순서대로 Level 0부터 차근차근 풀고 있다.
어제부터 시작했는데, 지금은 그래도 쉬운 문법으로도 풀 수 있어서 아주 쉽게쉽게 풀고 있다.
물론 실행해보고 오류가 생겨서 고치는 경우도 있지만,
알고리즘 강의를 들으며 어렵게 꼬였던 생각이 그나마 풀리는 기분이다.
Level 2까지는 무난히 풀어야 대기업 코테도 잘 볼 수 있다는데 아직 시작한지 얼마 안되었으니까!
어제도 욕심 부리지 말자고 다짐해놓고 풀어서 그런가 오늘은 왠지 어제보다 더 잘 풀린 기분이다 ㅋㅋㅋ
풀이는 따로 포스팅 해놓고 있는데 나중에 찾아보기 좋을 것 같아서 앞으로도 쭉 이럴 예정이다.
짧은 일기
이제 거의 습관처럼 마지막에 짧은 일기를 쓰는데, 하루를 돌아보는 것 같고 마무리 하는 기분이라서 좋다.
알고리즘...이번주 최대 난제다.
사실 계획에는 이렇게 강의를 듣는 진도가 느릴 줄 몰랐는데.
특강도 듣고 시간을 오래 쓰는데도 아직 처음이라서 접근 자체가 너무 어렵게 느껴지는 것 같다.
매니저님도, 튜터님도 너무 여기에 몰입하면 오히려 번아웃이 온다고 말씀해주셔서 마음을 편하게 먹으려고 하지만,
솔직히 마음처럼 쉽지는 않다.
그렇지만 진도를 느리게 나가면서 최대한 그림도 그려보고, 이해하는 중이다.
아니면 추가로 다른 강의를 더 듣거나 책을 보거나 해서 알고리즘을 천천히 이해하고 싶다.
정 버거우면 아예 멈추고 자바스크립트 문법을 더 보거나 하고.
파이썬을 하다가 아까 프로그래머스 문제는 자바스크립트로 풀려고 하니까 좀 헷갈리긴 했다 ㅋㅋㅋ
자바스크립트를 주로 써야 하는데 요 며칠 계속 파이썬을 써서 그런가 싶기도 하고.
주말동안 고민해보고 어떤 방향으로 가야할지 정해야겠다.
일단은 금요일이니까 즐겁게 마무리 하고 싶다.
이번주도 수고 많이했고, 알고리즘으로 힘들어하는 우리 조와 다른 분들 모두 화이팅이다!
'스파르타코딩클럽 내일배움캠프 > TIL' 카테고리의 다른 글
스파르타코딩클럽 내일배움캠프 12일차 (1) | 2022.11.15 |
---|---|
스파르타코딩클럽 내일배움캠프 11일차 (1) | 2022.11.14 |
스파르타코딩클럽 내일배움캠프 9일차 (2) | 2022.11.10 |
스파르타코딩클럽 내일배움캠프 8일차 (1) | 2022.11.09 |
스파르타코딩클럽 내일배움캠프 7일차 (1) | 2022.11.08 |