리뷰 이야기

[도서 리뷰] 파이썬과 함께하는 알고리즘과 자료구조

창이 2023. 11. 20.
728x90
반응형

안녕하세요. 금번 리뷰할 도서는 "첫 알고리즘+자료구조 WITH 파이썬' 입니다.

https://search.shopping.naver.com/book/catalog/43414015638

 

나의 첫 알고리즘+자료구조 with 파이썬 : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

 

저는 현 직장에서 마케팅 업무를 계속 보다가 최근 개발팀 PM으로 옮겨 개발자 분들하고 함께 일을 하고 있습니다. 안그래도, 알고리즘이나 자료구조에 대한 필요성을 많이 느끼고 있었던 찰나였습니다. 그 이유는, 제가 PM으로써 ERP 대시보드 UI 기획을 하고 있는데 제가 기획했던 대시보드가 개발자들한테는 너무 러프하게 다가왔던 것이죠. 그래서 개발자들이 개발하면서 저에게 엄청 많은 질문을 하셨습니다. 다양한 정보를 찾은 바로, 개발자들이 기획자에게 질문을 하면, 굉장히 실력이 안좋은 PM이라고 말을 하더라구요. 

 

여쨌든, 좋은 기회로 알고리즘과 자료구조에 대한 도서를 리뷰할 수 있게 되어 기분이 좋았습니다. 해당 도서는 또 개발 독학 1년 만에 이베이 개발자가 된 저자(코리 알트호프)가 집필하여 초보자의 관점에서 쓰여졌더라구요. 그래서 초보자도 읽기에 매우 수월했습니다. 

 

다음은 목차입니다. 책을 선택하실 때 참고해주시면 될 것 같습니다. 파이썬에 대해 잘 몰라도, 파이썬 코드로 잘 설명되어 있어 이해하기 쉬우면서도 기술 면접과 실제 프로그래밍에도 유용한 예제가 많이 들어가 있습니다. 그래서, 알고리즘이나 자료구조를 배우고 싶으신 분이라면 잘 이해할 수 있을 겁니다. 

 

 

 

알고리즘이란, 어떤 문제를 해결하기 위해 밟아 나가는 연속적인 단계 

 

실행 시간은 알고리즘을 평가하는 기준 중 하나입니다. 저는 항상 개발자들을 보면서 저 사람들은 무언가 산출물을 만들어낼 때만 KPI로 잡을까? 라고 생각했었는데 이번 알고리즘 공부를 해보면서 이런 실행 시간을 단축시킨다던지 코드를 짧게 만들거나 어떤 가이드라인을 하나 만들어놔서 전체 업무 시간을 줄여주는 것까지 모두 그 사람의 KPI로 들어갈 수 있겠다라고 생각했습니다.

 

조금 인상깊었던 점은, 지수 시간에 대한 시간 복잡도를 설명하면서 비밀번호의 개수에 따라 달라지는 시도 횟수로 설명하면서 독자들의 이해를 도왔습니다. 단번에 이해가 되었어요. 

 

해당 장의 마지막에는 각 용어들에 대한 정리를 해주면서 독자들을 이해시키기 위해 노력합니다 그리고 간단한 연습문제와 함께 나타내며 실력을 검증시키고 있습니다. 제가 생각하는 해당 도서의 타겟은 컴퓨터 공학을 전공하는 1학년 학부생들이나 중, 고등학생 그리고 타 전공에서 개발 직무를 이제 시작하고자 하는 직장인이 보시면 좋을 것 같습니다.

 

그래도 알고리즘 책이기에 간단한 코드를 보여드리겠습니다. 해당 코드는 이진 탐색을 작성하는 코드입니다. 파이썬으로요.

def binary_search(a_list, n):
	first = 0
    last = len(a_list) - 1
    while last >= first:
    	mid = (first + last) // 2
        if a_list[mid] == n :
        	return True
        else :
        	if n < a_list[mid] :
            	last = mid -1 
            else :
            	first = mid + 1
retrun False

간단하게 리뷰하면, binary_search 함수는 a_List와 찾고자하는 숫자인 n을 매개변수로 받습니다. 그리고 first와 last 변수에는 리스트의 처음과 마지막 자리를 저장합니다.

 

first = 0
last = len(a_list) - 1

먼저 first의 값을 0으로 초기화해 리스트의 첫 번째 자리에 할당하고 last 변수에는 전체 리스트의 길이에서 1을 뺀 값으로 설정해 리스트의 마지막 인덱스를 할당한다. 두 변수의 값은 a_list를 쪼개는 과정에서 계속 바뀔 것입니다. 

 

이 알고리즘은 while 문을 통해 리스트에 요소가 남아있는 한 계속 실행됩니다. 

while last >= first:

 

while 루프에서 first와 last를 더하고 2로 나눠 a_list의 중간 지점을 찾습니다.

 

mid = (first + last) // 2

 

여기에서 나중 // ( 이중 슬래쉬 ) 는 몫 연산자 입니다. 예를 들어 7 // 2 는 3이 됩니다. 리스트의 인덱스는 항상 정수이고 이 코드에서 찾는 중앙값 mid 역시 항상 정수여야 한다는 점에서 몫 연산자를 사용했습니다. 

 

그 다음에는 if 조건문을 사용해 중앙값이 찾는 숫자와 일치하는지 확인하고 일치하면 TRUE를 반환합니다. 

if a_list[mid] == n : 
	return True

 

일치하지 않으면 찾는 숫자가 중앙값보다 큰지 작은 지 판단합니다. 찾는 숫자가 중앙값보다 작다면 중앙값의 인덱스에서 1을 뺀 결과를 last에 저장합니다. 이렇게 하면 중앙값보다 큰 쪽 절반을 버리는 것이 됩니다. 

 

if n < a_list[mid]:
	last = mid - 1

 

만약 찾는 숫자가 중앙값보다 크다면 중앙값의 인덱스에서 1을 뺀 결과를 first에 저장합니다. 이렇게 하면 중앙값보다 작은 쪽 절반을 버리는 것과 마찬가지가 됩니다. 

 

else:
	first = mid + 1

 

다시 first와 last 변수를 사용해 리스트에서 중앙값의 인덱스를 찾고 더 작아진 범위에서 루프를 반복합니다.

mid = (first + last) // 2
retrun False

 

 

이런 식으로 전체 코드를 다 나타낸 뒤 해당 도서는 코드를 한 줄 한 줄씩 뜯어가며 설명해주고 있습니다. 심지어 // 까지 알려주는 것을 보고 정말 초심자를 위해서 쓰여졌다는 것을 많이 느꼈습니다. 이진 탐색에 대해 동기가 설명해줘서 한번 들은 적이 있었는데, 해당 도서를 보니 단번에 이해가 되는 것 같습니다. 

 

https://www.hanbit.co.kr/store/books/look.php?p_code=B6059187036

 

나의 첫 알고리즘+자료구조 with 파이썬

전공자가 아니어도! 프로그래밍 언어를 몰라도! 누구나 쉽게 배우는 알고리즘+자료구조 입문서

www.hanbit.co.kr

728x90
반응형

댓글

추천 글