Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
[TIL] IT 5분 잡학사전 챌린지: 7일차 (22-25ep)
#book_club
1년 전
984
4

오늘 TIL 3줄 요약

  • 자료 구조는 효율적인 코드 및 프로그램의 완성을 위해 꼭 필요하고 중요하다.

  • 시간 복잡도 표기법으로는 빅-오 표기법이 있는데, 시간 복잡도를 좀 더 간단하게 이해할 수 있도록 도와준다.

  • 검색 알고리즘에는 선형 검색, 이진 검색 등이 있다.

TIL (Today I Learned) 날짜

2023.08.31

오늘 읽은 범위

에피소드22. 자료구조와 알고리즘은 필수라고?

에피소드23. 배열이 뭐죠?

에피소드24. 알고리즘의 속도는 어떻게 표현할까?

에피소드25. 검색 알고리즘이 뭐죠?

책에서 기억하고 싶은 내용을 써보세요.

  • 처음부터 자료구조를 공부해야할 필요는 없지만, 이후 코드를 최적화하고 효율적으로 만들기 위해서 자료구조와 알고리즘은 꼭 필요한 요소이다. 어떤 자료구조를 사용하는지에 따라 프로그램의 속도를 좌지우지 할 수 있다.

  • 배열에서 자주 하게 되는 동작: 읽기, 검색, 추가, 삭제 -> 시간 복잡도(작업 속도)와 긴밀한 연결.

  • 배열 내에서 모든 위치를 다 살펴본 후 데이터를 찾는 방식을 '선형 검색(linear search)'라고 한다. (for문으로 찾는게 여기 해당하겠지?)

  • 시간 복잡도는 '작업이 얼마나 많은 과정을 거치는가'로 측정된다. '알고리즘으로 작업을 완료할 때까지 걸리는 절차 수 N'을 이용해 O(N), O(log N)과 같이 표현한다. -> 빅-오(Big-O) 표기법

  • 빅-오 표기법: 설명을 간단하게 만들어주고 알고리즘 분석을 빠르게 하게 해준다.

  • 검색 알고리즘: 1) 선형 검색(linear search) 2) 이진 검색(binary search)

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  • 오늘 내용들은 컴퓨터 공학에 있어 절대 빠질 수 없고 기본적인 내용이지만, 프로젝트 실습 위주의 과제를 주로 하면서 프로그래밍을 배운 내 경우에는 이런 부분이 부족하다. 그래서 이런 부분이 나오면 더 집중을 하고 보게 된다. 항상 읽어도 이해가 쉽지는 않은 것 같았는데, 오늘 내용에서 빅오 표기법으로 O(1),O(N), O(N2)을 읽었는데, 굉장히 쉽고 떠먹여주듯 설명해 주신 것 같았다.

  • 빅오 표기법을 좀 더 알아보았다.

    • O(1): 상수시간.

    • O(log N): 로그시간. 상수시간 (O(1))다음으로 빠르며, 효율적인 속도

    • O(N): Linear time, 선형시간. 인풋 값 증가 시 같은 비율로 증가. (N과 1:1의 관계)

    • O(N2): 2차 시간. 느린편에 속하며 인풋의 증가시 n의 제곱 비율로 증가.

    • O(n!): 팩토리얼 시간. 가장 느린 속도. 인풋이 증가함에 따라 기하급수적으로 연산의 수가 늘어난다.

  • 연습 문제와 함께 학습해보는 빅오 표기법

  • 검색 알고리즘은 찾아보니 '해시 탐색법'이라는 것도 있었다. 이진 탐색, 선형 탐색과 다르게 해시 탐색법은 데이터 내용과 저장한 곳의 요소를 미리 연결해둔 상태에서 짧은 시간에 탐색할 수 있도록 고안된 방식이라고 한다.

  • 자료구조는 아무리 해도 어렵게 느껴지고 자료를 찾으면 찾을 수록 이해해야할 것이 더 많아지는 느낌이다. 파고 들어가면 들어갈 수록 뭔가 더 계속 나오는 ... 양파같은 느낌? 눈물을 흘리면서 공부하게 되니 양파가 맞는 건가 싶다. 더 나은 코드, 더 효율적인 개발을 하기위해선 필수이니 어떻게든 꾸준히 보고 또 공부하는 방법 밖에 없는 듯하다.

  • 오늘은 책 내용에 대한 감상보다는... 실습과 직접 짜보는 코드도 중요하지만 그만큼 이론을 필요로 하고 아는 것도 중요하다고 '다시 한 번 더' 생각 하게 된다. 사실 주기적으로 생각한다. (ㅠㅠ)

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • 빅오 표기법을 좀 더 찾아보다보니 억지로 외우는 게 아니라 계산하는 방식을 이해하는 게 좋을 것 같았다. 계산 하는 방식에 대해서 예제같은 것들이 있으니 그걸 좀 더 찾아보고 공부해봐야겠다.

과제2) 나의 최대 북틸

어떤 북틸을 읽으면 좋을까 고민하다가 book_club에서 TIL으로 검색해서 가장 인기가 많았던 글(비록 잡학사전에 대한 TIL은 아니더라도!), 타고 타고 읽어나가다가 발견한 지난번 기수 TIL, 경험담이 마음에 와 닿았던 TIL을 꼽아봤다. (leeq님과 pksl님의 TIL은 '클린코드' 북클럽 글인 것 같다. 내 읽고 싶은 책 리스트에 있었는데 더 읽어봐야할 이유가 생긴 것 같다.)

  • leeq님의 북틸

    • 아마 다른 북클럽에서 쓴 TIL인 것 같은데, 내용이 재미있으면서 내가 지은 변수와 함수 이름에 대해서 생각하게 해서 가져와봤다. 이름을 짓는 일은 정말 어려운 것 같다. 나 혼자 코드를 할 때는 상관 없을 수도 있지만(물론 혼자 코드를 할때도 중요하지 않은 건 아니다. 본인이 어떻게 기억을 하느냐가 관건이고 혹여나 나중에 그 코드를 누군가에게 보여줘야한다면... 음... 상상만으로 난감해진다.), 협업을 하는 상황에서는 백번 강조해도 모자람이 없다. 목적을 충분히 설명하고 있어야하면서도 간결하고 직관적이어야하는 변수/함수 이름을 짓기 위해서 시간이 더 든적도 있다. 별 것 아닌 것 같지만 이런 고민에서부터 깨끗하고 이해하기 쉬운 코드가 탄생한다고 생각한다. 이런 걸 배우고 노하우를 얻는 방법으로 다른 사람과 코드 리뷰를 하는 시간이 도움이 되지 않을까. (노마드코더에서 코드 리뷰하는 챌린지나 코스를 이벤트성으로 한다면 인기가 많을 것 같다.)

  • hailey님의 노션 북틸

    • 개인적으로 북틸을 볼 때 소감이나 느낀점에서 내가 공감이 많이 느끼는 글을 인상깊게 보곤한다. hailey님의 북틸은 우연히 다른 사람의 TIL을 보다가 추천하는 TIL을 타고 들어가서 발견한 TIL인데 (노션이었으나 다행히 공개 노션이라서 볼 수가 있었다 ㅠㅠ 간혹 타고 들어가다가도 노션이면 비공개거나 로그인을 하지 않으면 못보는 글도 있어서 노션 유저가 아닌 나는 로그인까지 해가면서 볼 부지런함이 없다...) 오류를 보고 처음 느꼈던 부분들을 읽으면서 내가 오류를 만났을 때의 기분이 들어 같이 답답해졌고(ㅋㅋ) 공감이 돼서 가져왔다. 오류를 보는 게 익숙한 지금도 오류 메시지 때문에 여전히 답답할때가 많다 ㅎㅎ 오류는 참 도움이 되는 친구면서도 사람 속을 타게 한다.

pksl님의 북틸

  • 이 TIL역시 이번 잡학사전 TIL은 아니었지만, 각 토픽에 대해 고민한 흔적들이 느껴지고 그 토픽에 대해 짤막하게 덧붙인 설명과 감상이 나도 책을 읽고 싶게 만들었다. 특히, 좋은 설계의 핵심 부분이 너무 궁금하다. 과제를 하면서 코드 규칙은 정해져 있어 그에 맞게 코드는 짰지만, 규칙에 맞게 코드를 짠 것과 설계를 잘 한 코드는 엄연히 다르니까 '잘 설계 된 코드'에 대해 항상 궁금해한다. 가끔 코드 챌린지를 하는 사이트에서 코드를 풀고나서 다른 사람의 코드들도 볼 수 있는데, 마냥 짧고 간결한 코드가 잘 설계된 코드라는 느낌이 들지는 않는다. 개인적으로 이해하기 쉬우면서도 간결함을 유지하는 코드가 잘 설계된 코드라는 생각을 한다. 무조건 짧게 줄이기만 한 코드는 가끔 가독성도 오히려 떨어지고 이해하는데 시간이 걸릴때도 있었기 때문이다. (경험 부족에서 오는 것이라면 할말은 없다...ㅎㅎ)

그리고 이건 북틸 과제와는 다른 이야기인데, 북틸을 읽고 왔다갔다 하기에 게시판이 좀 불편한 것 같다. 페이지가 인덱스 식으로 돼 있는 게 아니라 스크롤하면서 로딩이 되는 식이라 봤던 글을 다시 찾으려 하거나 이전에 작성 됐던 글을 보려고 하면 검색하지 않는 이상 계속 해서 내려가야하기 때문에 그렇게 느끼는 것 같다.

4 comments