반응형 전체 글305 정렬 알고리즘, 버블 정렬 Preface 이번 장에선 정렬 알고리즘이란 무엇인지에 관한 내용과 그 종류 중 하나인 버블 정렬 및 버블 정렬에 약간의 변화를 준 셰이커 정렬을 공부했다. 코드를 작성할 땐 아무 생각 없이 책에 나온 방식대로 진행하게 되지만, 해당 코드를 완성하면 기존의 코드에 능률성을 더한 새로운 코드 작성을 요구한다. 이전부터 코드를 작성할 때 어떻게 해야 더욱 효율적인 코드를 작성할 수 있을지를 고민하자고 생각은 하지만, 막상 공부를 하다 보면 그게 마음대로 되지 않는다. 내일부턴 책에 있는 코드를 그대로 따라 작성하기 전에 해당 문제를 해결할 방법을 미리 고민해 본 후 책과 비교하며 코드를 짤 생각이다. 또, 알고리즘 공부를 시작한 뒤로 진도를 나가는 데 시간이 너무 오래 걸리는데, 내 공부 방식이 맞는 것인지.. 2022. 1. 2. 파이썬 복습 Preface 오늘은 본격적으로 공부를 다시 시작하기 전 그동안 배웠던 내용들을 다시 떠올리고 감을 찾기 위해 파이썬의 기본 문법들을 전체적으로 복습했다. 두 달만에 다시 하는 공부라 기억이 하나도 나지 않을까봐 걱정했지만, 업로드했던 글들을 보며 코드를 다시 작성해보니 대부분의 내용들이 금방 떠올랐다. 아쉬운 점이 참 많은 지난 한 해였지만 모두 내가 선택하여 자초한 일들이니 지나간 날을 후회할 시간에 앞으로 어떻게 살아갈 것인지에 대해 고민하고 노력하자. 지금부터라도 조금씩 꾸준히 공부한다면, 작은 성취들이 쌓여 올해가 끝나갈 때 쯤엔 목표에 한 걸음 더 가까워질 수 있을 것이라 생각한다. 오늘 저녁엔 파이썬 연습문제들을 풀어 본 후 내일부턴 다시 자료구조와 알고리즘을 공부할 계획이다. 2022. 1. 1. 하노이의 탑, 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. 반복하는 알고리즘 Preface 이번 장은 내용이 많아 이틀에 걸쳐 조금씩 공부했다. 코드를 한 줄 한 줄 분석하며 이해하다 보니 시간은 조금 오래 걸렸지만, 그동안 파이썬으로 별 생각 없이 작성하던 코드들이 어떤 방식으로 작동하는 것인지 생각해 볼 수 있었다. 또, 단일 대입문과 비교 연산자의 연속적인 사용 방법, 가우스의 덧셈, 드모르간의 법칙 등 새로운 내용들도 배울 수 있었으며, 다양한 방식(내가 그동안 생각치 못했던 방식)으로 작성된 코드를 접하자 알고리즘을 통해 코드를 작성하는 방법은 정말 무궁무진하다는 것을 다시 한 번 느낄 수 있었다. 물론 중간 중간 내가 생각하는 방식대로 코드를 작성해 보기도 했다. 마지막으로 이번 장을 공부하며 코드를 작성할 땐 계산(반복)을 최대한 줄여 복잡성을 감소시키는 것이 중요한.. 2021. 9. 29. 알고리즘이란? Preface 오늘은 알고리즘의 첫 부분을 공부했다. 아직 초반 부분이라 그런지 딱히 어려운 부분은 없었고 대부분 이전에 공부했던 내용들이었다. 앞으로 책을 볼 때마다 코드 이해도와 코딩 속도 향상을 위해 책에 실린 다양한 실습 코드를 한 줄 한 줄 분석하며 직접 코드를 작성해 볼 생각이다. 1. 알고리즘이란? - 순차 구조 : 한 문장씩 순서대로 처리되는 구조 - 조건식 : if와 콜론(:) 사이에 있는 식 - 선택 구조 : 조건식으로 평가한 결과에 따라 프로그램의 실행 흐름이 변경되는 구조 - 형 변환 : 문자열형을 정수형으로 변환하는 과정 - 복합문의 구조 1) 헤더 : 키워드로 시작하여 콜론으로 끝나는 복합문의 첫 부분 2) 콜론 : 바로 뒤에 스위트가 이어짐을 의미 → 스위트 : 헤더와 한 세트.. 2021. 9. 28. 파이썬 스타일 가이드 https://www.python.org/dev/peps/pep-0008/ PEP 8 -- Style Guide for Python Code The official home of the Python Programming Language www.python.org 파이썬 스타일 가이드 링크 2021. 9. 28. 이전 1 ··· 13 14 15 16 17 18 19 ··· 22 다음