반응형 Algorithm/자료구조와 함께 배우는 알고리즘(Python)23 정렬 알고리즘, 버블 정렬 Preface 이번 장에선 정렬 알고리즘이란 무엇인지에 관한 내용과 그 종류 중 하나인 버블 정렬 및 버블 정렬에 약간의 변화를 준 셰이커 정렬을 공부했다. 코드를 작성할 땐 아무 생각 없이 책에 나온 방식대로 진행하게 되지만, 해당 코드를 완성하면 기존의 코드에 능률성을 더한 새로운 코드 작성을 요구한다. 이전부터 코드를 작성할 때 어떻게 해야 더욱 효율적인 코드를 작성할 수 있을지를 고민하자고 생각은 하지만, 막상 공부를 하다 보면 그게 마음대로 되지 않는다. 내일부턴 책에 있는 코드를 그대로 따라 작성하기 전에 해당 문제를 해결할 방법을 미리 고민해 본 후 책과 비교하며 코드를 짤 생각이다. 또, 알고리즘 공부를 시작한 뒤로 진도를 나가는 데 시간이 너무 오래 걸리는데, 내 공부 방식이 맞는 것인지.. 2022. 1. 2. 하노이의 탑, 8퀸 문제 Preface 거의 두 달 만에 글을 작성한다. 개발 공부를 시작한 뒤로 이렇게 오래 공부를 쉬었던 적은 처음인 것 같다. 그동안 이런저런 일들이 있었다. 기말고사를 친 후 무사히 2학기를 마쳤고, 여자친구가 생겨 이곳 저곳 놀러다니며 데이트도 했다. 정말 오랜만에 사귄 여자친구인 탓인지 모든 정신이 팔려 시간 가는 줄도 모르고 두 달을 보낸 것 같다. 그런데 연말이 되고 주변에서 목표를 이루기 위해 노력하는 친구들을 보니 문득 정신이 들었고, 이렇게 허송세월을 보낼 수는 없다는 생각이 뇌리를 스쳤다. 이제 며칠 후면 스물 셋이 되고 졸업도 가까워졌다는 조바심에 서둘러 책을 펴 공부를 시작했지만, 너무 오랜만에 공부를 하는 탓인지, 내용 자체가 어려운 탓인지 이해가 잘 되지 않았고, 기본적인 내용도 기억.. 2021. 12. 29. 재귀 알고리즘의 기본, 재귀 알고리즘 분석 Preface 이번 장에선 재귀 알고리즘에 대해 공부했다. 재귀 알고리즘을 사용하면 코드를 보다 짧게 작성할 수 있다고 하는데, 나는 아직 재귀 알고리즘이 어떻게 작동하는 것인지 정확히 이해하지 못했다. 책에 수록되어 있는 그림을 보며 코드를 이해하려 해봐도 출력값을 예상할 수 없었다. 다음 장을 공부하기 전 모든 코드를 다시 한 번 살펴보며 완벽히 이해한 후 넘어갈 계획이다. 1. 재귀 알고리즘의 기본 - 재귀 : 어떠한 이벤트에서 자기 자신을 포함하고 다시 자기 자신을 사용하여 정의되는 경우 → 프로그램을 간결하고 효율성 좋게 작성할 수 있음 - 팩토리얼 코드 def factorial(n: int) -> int: if n > 0: return n * factorial(n - 1) else: retur.. 2021. 10. 25. 큐란? Preface 중간고사 이후 오랜만에 글을 업로드한다. 요즘엔 이런 저런 핑계를 대며 공부를 하지 않는 날이 많아진 것 같다. 저번 주만 해도 시험 공부를 한 뒤 한 두 시간 정도는 시간을 내 공부를 할 수 있었지만, 귀찮고 피곤하단 이유로 누워서 의미없는 시간을 보냈다. 매일 후회할 일을 하지 않고자 다짐해도 그게 말처럼 쉬운 일은 아닌 것 같다. 원하는 목표를 이루기 위해선 항상 초심을 잃지 말자. 이번 장에선 선입선출 자료구조인 큐에 대해 공부했는데, 코드 자체는 지난 번에 공부했던 스택과 크게 다른 부분이 없어 쉽게 이해하고 넘어갈 수 있었다. 또, 얼마 전까지만 해도 annotation과 enum의 사용이 헷갈리고 귀찮게 느껴졌지만, 여러 번 코드를 작성하다보니 나름 익숙해진 것 같다. - 큐(.. 2021. 10. 24. 스택이란? Preface 이번 장에선 데이터를 담는 방법 중 하나인 스택에 대해 공부했다. 스택과 큐는 운영체제를 공부하며 한 번 훑었던 기억이 있어 막히는 부분 없이 쉽게 이해할 수 있었다. 또, deque(라이브러리)를 사용하여 코드를 제대로 작성해 본 것은 이번이 처음인데, 길고 복잡한 코드를 짧고 직관적으로 표현할 수 있다는 점이 신기했다. 최근 걱정되는 점은 시간 분배에 관한 부분인데, 중간고사 이후 대면 수업이 예정되어 있어 평일에 개발 공부를 어떻게 해야 할 지 고민이다. 추가로 다음 주는 시험으로 인해 글을 자주 올리지 못할 것 같다. - 스택(stack) : 데이터를 임시 저장할 때 사용하는 자료구조 → LIFO(Last In First Out) : 후입선출 방식 1) 푸시(push) : 스택에 데.. 2021. 10. 14. 해시법 Preface 이번 장은 공부하는 데 생각보다 오랜 시간이 걸렸다. 개인적인 사정이 생겨 시간이 없었던 탓도 있지만, 내용 자체가 어렵고 길어 코드를 한 줄 한 줄 읽어가며 이해하는 것이 어려웠다. 무엇보다 이전엔 사용하지 않던 어노테이션을 사용하려 하니 손에 익지 않아서인지 꽤나 불편했다. 또, 다양한 클래스와 함수, 변수를 한 프로그램 내에서 모두 사용하자 정신이 없었다. 앞으로는 이보다 훨씬 길고 복잡한 코드를 자주 접하게 될텐데, 벌써부터 코드를 이해하는 데 어려움을 겪으니 걱정이 앞선다. 이번에 공부한 코드를 자주 읽어보며 구현력과 가독성을 높이자. - 해시법 : '데이터를 저장할 위치 = 인덱스'를 간단한 연산으로 구하는 것 - 해시값 : 원소의 값 % 원소의 개수 - 해시 테이블 : 해시값을.. 2021. 10. 12. 이진 검색 Preface 지난 포스팅에 이어 배열 검색 알고리즘 중 하나인 이진 검색을 공부했다. 원래 해시법까지 모두 공부한 후 한번에 글을 작성할 계획이었지만, 이번 장을 공부하는 데 생각보다 긴 시간이 걸려 이렇게 따로 업로드한다. 이진 검색 코드를 작성하던 도중 한 가지 의문점이 생겨 이를 해결하고자 새로운 코드를 직접 작성해봤으며, 자세한 내용은 본문에 적어놓았다. 1. 이진 검색 - 이진 검색 : 원소가 오름차순이나 내림차순으로 정렬된 배열에서 좀 더 효율적으로 검색할 수 있는 알고리즘 - 이진 검색의 종료 조건 1) a[pc]와 key가 일치하는 경우 2) 검색 범위가 더 이상 없는 경우 - 이진 검색 알고리즘 코드 from typing import Any, Sequence def bin_search(.. 2021. 10. 7. 검색 알고리즘과 선형 검색 Preface 이번 장에선 배열 내에서 특정 데이터 값을 찾는 검색 알고리즘에 대해 공부했다. 선형 검색을 수행하는 코드를 작성해 본 후 보초법에 대한 설명을 읽어봤을 땐 어디서 반복을 줄여준다는 것인지 이해가 가지 않았다. 그러나 두 코드를 주의깊게 비교해보니 while 문 내에서 if 문의 개수가 다르다는 것을 알 수 있었다. 알고리즘을 정확히 공부하고 코딩 실력을 향상시키기 위해선 코드 내에서의 미세한 차이가 결과적으론 큰 차이를 이끌어낼 수 있다는 것을 항상 명심하자. 1. 검색 알고리즘이란? - 키(key) : 검색 조건에서 주목하는 항목 → 대부분 키는 데이터의 일부이다. - 검색의 종류 1) 배열 검색 2) 연결 리스트 검색 3) 이진 검색 트리 검색 - 배열 검색 알고리즘 1) 선형 검색 .. 2021. 10. 4. 배열이란? Preface 이번 장에선 지난 포스팅에 이어 배열을 공부했다. 내용 면에선 크게 어려운 부분이 없었지만, 이를 알고리즘을 통해 실제 코드로 구현하는 실습 과정이 생각보다 복잡했다. 코드를 한 줄 한 줄 읽어보면 분명 이해는 할 수 있지만, 막상 풀이 과정을 보지 않고 혼자 해결하려 하면 어떻게 구현해야 할 것인지 감이 오지 않았다. 다시 말해 개별적인 함수의 사용법은 어느정도 숙지했지만, 이 함수들을 사용하여 문제를 해결할 방법이 잘 떠오르지 않는다. 당분간은 특정 문제가 주어졌을 때 이를 해결하기 위해 어떤 접근 방법을 취해야 할 것인지에 초점을 맞춰 차근차근 코드를 작성하는 연습을 할 계획이다. 소프트웨어 공학에서 공부했던 것처럼 추상화 단계를 점차 낮추며 코드를 작성하자! 1. 배열이란? - 스캔.. 2021. 10. 2. 자료구조와 배열 Preface 이번 장에선 파이썬의 배열 중 하나인 리스트와 튜플에 대해 공부했다. 두 가지 모두 '점프 투 파이썬'을 통해 자주 접하고 사용하여 익숙해진 탓인지 마음 편히 진도를 나갈 수 있었다. 다만 헷갈리는 함수들이 몇몇 있어 다음 장을 시작하기 전 리스트 함수 부분을 복습할 계획이다. 1. 자료구조와 배열 - 원소 : 배열에 저장된 객체 - 파이썬에서의 배열 1) 리스트 : 뮤터블(mutable : 값을 변경할 수 있음) 2) 튜플 : 이뮤터블(immutable : 값을 변경할 수 없음) → 리스트에선 마지막 원소에 쉼표를 써도 되고 쓰지 않아도 되지만, 튜플에서 원소가 1개인 경우엔 원소 뒤에 쉼표를 반드시 입력해야 한다. - 언팩(unpack) : 리스트나 튜플의 원솟값들을 풀어 여러 변수에 .. 2021. 10. 1. 이전 1 2 3 다음