파이썬으로 익히는 말랑말랑 알고리즘 (차근차근 설명하고 막힘없이 이해하는 알고리즘)

파이썬으로 익히는 말랑말랑 알고리즘 (차근차근 설명하고 막힘없이 이해하는 알고리즘)

$30.34
Description
처음 코딩 테스트를 준비하는 초보자도 어려움없이 배우는 알고리즘 도서!
1. 이론과 예제 문제 모두, 초보자를 위해 차근차근!
탄탄하게 알고리즘 이론을 배우고, 제대로 이해했는지 확인할 수 있는 예제 문제가 준비되어 있습니다. 알고리즘 이론은 대충 이해했는데 예제 문제가 갑자기 어려워져서 책으로 공부하기 힘들었다고요?
도서 ≪파이썬으로 익히는 말랑말랑 알고리즘≫은 예제 문제도 초보자들을 위해 첫 단계부터 차근차근 풀어갑니다. 그동안 알고리즘에 패배감을 느껴왔던 독자분께 도움이 될 도서입니다.

2. 반복, 반복, 또 반복! 알고리즘이 익숙해질 때까지!
무엇이든 제대로 습득하기 위해선, 반복의 과정이 있어야 합니다.
제대로 소화할 때까지 반복하며 단계 별로 차분히 풀어갑니다. 이 과정을 통해 알고리즘을 여러분의 것으로 만들어 가세요.

3. 계속해서 발전시켜가는 코드 작성법. 첫 술에 배 부르랴!
첫 코드로 속도, 적은 메모리 공간, 깔끔한 변수, 이 모든 것을 고려할 수 없습니다. 처음엔 투박하게 작성된 코드를 계속해서 다듬고 발전시켜서 멋진 코드로 완성해 가는 거죠! 이 과정을 단계별로 하나하나 전부 담았습니다. 첫술에 배 부르랴! 여러 번 떠먹으면서 배 부르게 알고리즘을 소화시킬 수 있도록 돕는 도서, 지금 당장 알고리즘을 시작하세요!
저자

김경록

백엔드개발자로다양한프로젝트에참여하다,현재는오픈소스컨설팅전문기업OSCKorea에서마이크로서비스아키텍처(MSA)컨설턴트로즐겁게일하고있습니다.개발자로서새로운기술을익히고이를전파하여한국개발자커뮤니티의성장과한국IT업계의파이를키우는데관심이있습니다.
블로그와유튜브채널〈뷰티풀프로그래밍〉을운영하고있습니다.

목차

1장.알고리즘이란?
1.1.알고리즘을공부하는이유
1.2.알고리즘이어려운이유
1.3.코딩테스트준비의시작
1.4.코딩테스트를보는이유
1.5.좋은알고리즘이란?
1.6.알고리즘을잘하는개발자가좋은개발자인가요?
1.7.이책의목표
2장.아는것같지만떠올리기어려운기술들
2.1.글자개수만큼배열만들기
2.1.1.len()으로개수세기
2.1.2.반복문을이용해개수만큼반복하기
2.1.3.인덱스로배열에접근하기
2.1.4.인덱스로배열에값넣기
2.1.5.빈리스트에인덱스로접근하기
2.1.6.빈리스트에값할당하기
2.1.7.append()로값초기화하기
2.1.8.None이100개들어있는리스트만들기
2.2.리스트안의숫자개수세기
2.3.자리바꾸기swap
2.4.배열의인덱스값바꾸기
2.5.중복제거하기
2.5.1.셋(Set)이란?
2.5.2.List를Set으로바꾸기
2.6.빈(empty)리스트([])에서값을뽑게될때
3장.입문용알고리즘
3.1.짝수,홀수구하는함수만들기
3.1.1.‘%’연산자로나머지구하기
3.1.2.구한나머지를이용해짝수,홀수판단하기
3.2.배수인지알아보기
3.2.1.배수(multiple)란?
3.2.2.‘%’연산자로나머지구하기
3.2.3.배수인지아닌지True,False로나오게하기
3.3.자릿수들의합구하기
3.3.1.‘/’연산자로몫구하기
3.3.2.‘//’연산자로몫구하기
3.3.3.10으로나누어보기
3.3.4.한번더몫과나머지구하기
3.3.5.1의자리만있는숫자를10으로나누기
3.3.6.반복문넣기
3.3.7.quotient(몫)변수빼기
3.3.8.remainder(나머지)변수빼기
3.4.최댓값(max),최솟값(min)구하기
3.4.1.핵심로직
3.4.2.반복문으로숫자하나씩확인하기
3.4.3.result변수선언하기
3.4.4.최댓값교체하는로직넣기’
3.4.5.음수가주어졌을때문제점
3.4.6.변수result의초기값설정
3.4.7.불필요한연산제거
3.4.8.최댓값이들어있는인덱스(Index)출력하기
3.4.9.Index를리턴하도록로직변경하기
3.4.10.Index에있는값들비교
3.4.11.개선할부분
3.4.12.최솟값구하기
4장.무차별대입법[BruteForce]
4.1.통장비밀번호풀기
4.2.통장비밀번호푸는알고리즘개발하기
4.3.핵심로직
4.3.1.0000부터0009까지(000h)
4.3.2.0000부터0099까지(00hj)
4.3.3.0000부터0999까지(0hji)
4.3.4.0000부터9999까지(hjik)
4.3.5.입력받은암호와같으면return
5장.스택[Stack]
5.1.스택(Stack)은처음부터있었을까요?
5.1.1.스택(Stack)을쓰는이유
5.1.2.위구조의문제점
5.1.3.스택(Stack)연산사용방법
5.1.4.스택(Stack)구현하기
5.1.5..pop()구현하기
5.1.6.스택이비었을때.pop()의기능수정
5.1.7..empty()구현하기
5.1.8..peek()구현하기
5.2.괄호문제풀기
5.2.1.괄호문제풀기전에알아둘것
5.2.2.스택(Stack)을안쓰고괄호풀기
5.2.3.문자열빼기
5.2.4.반복문적용
5.2.5.문자열빼는로직붙이기
5.2.6.s의값업데이트
5.2.7.breck적용
5.2.8.얼마나반복해야할까요?-while적용
5.2.9..split(‘()’),‘’.join적용
5.2.10.함수로만들기
5.2.11.스택(Stack)을꼭사용해야하나요?
5.3.스택을이용해괄호문제풀기
5.3.1.핵심로직
5.3.2.st.push()이용하기
5.3.3.Stack1클래스파일로분리하기
5.3.4..pop()하기
5.3.5.닫는괄호‘)’부터나올때의처리
5.3.6..함수로만들기
5.3.7.속도테스트
5.3.8.더빠르게하는방법
5.4.{},[]도있는경우
5.4.1.스택을사용하지않았을때속도테스트
5.4.2.정규식을쓰는경우속도가더빠를까요?
5.4.3..스택으로구현하기
5.4.4.스택에서꺼내는.pop()조건
5.4.5.짝이맞는괄호인지판단하기
6장.해시[Hash]
6.1.해시의탄생
6.2.해시구현
6.3.해시테이블구현
6.4.해시충돌(HashCollision)
6.5.오픈어드레싱(Openaddressing)
6.6.체이닝(Chaining)
6.7.완주하지못한선수
7장.소수[Prime]
7.1.단순하게구하기
7.1.1.n%I구하기
7.1.2.조건문적용
7.2.에라토스테네스의체
7.2.1.1지우기
7.2.2.2의배수지우기
7.2.3.3의배수지우기
7.2.4.4의배수지우기
7.2.5.5의배수지우기
7.2.6.6의배수지우기
7.2.7.7의배수지우기
7.3.에라토스테네스체알고리즘구현하기
7.3.1.2부터n까지숫자가들어있는배열만들기
7.3.2.배수반복문만들기
7.3.3.뒤에서부터반복하기
7.3.4.나누어떨어지면지우기
7.3.5.함수로만들기
7.3.6.속도문제
7.3.7.while문을이용한속도개선
7.4.숫자를지우지않는에라토스테네스의체
7.4.1.check배열만들기
7.4.2.while문으로반복하기
7.4.3.ns[i]의배수를False로표시하기
7.4.4.반복문시작숫자를식(Statement)으로
7.4.5.체에친결과출력하기
7.4.6.함수로만들기,속도테스트
7.4.7.중복으로처리되는값들에대해
8장.단순탐색(SimpleSearch)과이진탐색(BinarySearch)
8.1.심플서치(SimpleSearch)-단순탐색
8.2.바이너리서치(BinarySearch)-이진탐색
8.2.1.중간값(midindex)찾기
8.2.2.중간에있는값과찾고자하는값비교하기
8.2.3.중간값이대상값보다작을때,클때
8.2.4.찾을때까지반복하기
8.2.5.코드정리&찾는값이없을때
8.2.6.최종코드정리
9장.정렬[Sort]
9.1.버블정렬
9.1.1.대상배열선언하고결과쓰기
9.1.2.첫번째와두번째값뽑기
9.1.3.자리바꾸기
9.1.4.배열에적용하기
9.1.5.4번째숫자와비교하기
9.1.6.변수대신인덱스로변경
9.1.7.for문적용하기
9.1.8.배열크기에따라실행횟수바뀌게하기
9.1.9.중첩for문적용하기
9.1.10.배열에숫자가추가되어도정렬이잘되게하기
9.2.퀵정렬
9.2.1.퀵정렬이빠른이유
9.2.2.퀵정렬구현하기
10장.재귀[Recursive]
10.1.1에서100까지loop문안쓰고출력하기
10.1.1.1에서100까지loop문으로반복하기
10.1.2.파라미터만들기
10.1.3.자신을호출하도록만들기
10.1.4.파라미터에값넘겨주기
10.1.5.탈출조건넣기
10.1.6.1씩커지는로직넣기
10.1.7.정리하기
10.2.리턴(return)값이있는재귀-배열의모든값sum하기
10.2.1.배열에서인덱스로값뽑아서더하기
10.2.2.변수사용하기
10.2.3.arr.pop()이용해서맨뒤의값뽑아내기
10.2.4.pop한번더사용하기
10.2.5.재귀호출하기
10.2.6.쌓이는부분만들기accu
10.2.7.탈출조건적용하기
10.2.8.accu에뽑은값을더하는로직
10.2.9.소스코드정리하기
10.3.팩토리얼(Factorial)-재귀호출의과정
10.3.1.재귀로팩토리얼구하기
10.4.피보나치수열만들기
10.4.1.피보나치수열의인덱스
10.4.2.피보나치수열구현하기
10.4.3.3번째값을넣는부분반복하기
10.4.4.연산반복하기
10.4.5.한개의숫자를리턴하도록바꾸기
10.5.재귀로피보나치수열만들기
10.5.1.return에서재귀호출
10.5.2.탈출조건만들기
10.6.최대공약수구하기(GCD:GreatestCommonDivisor)
10.6.1.gcd(a,a)=a로직추가하기
10.6.2.a〉b일때,gcd(a,b)=gcd(a-b,b)로직추가하기
10.6.3.a〈b일때,gcd(a,b)=gcd(a,b-a)로직추가하기
11장.다이내믹프로그래밍[DynamicProgramming]
11.1.LCS(LongestCommonSubsequence)
11.1.1.LCS핵심로직
11.1.2.i=0일때(D와ABCDCBA비교)
11.1.3.i=1일때(DC와ABCDCBA비교)
11.1.4.i=2일때(DCA와ABCDCBA비교)
11.1.5.i=3일때(DCAB와ABCDCBA비교)
11.1.6.i=4일때(DCABD와ABCDCBA비교)
11.1.7.i=5일때(DCABDC와ABCDCBA비교)
11.1.8.코드로구현하기
11.1.9메모(memo)배열만들기
11.1.10.비교할문자열하나씩보기
11.1.11.비교하면서메모장에기록하기
11.2.최적의전략(OptimalStrategy)찾기
11.2.1.가장큰숫자가지고오기
11.2.2.더좋은방법찾아보기
11.2.3.알고리즘구현하기
11.2.4.숫자가3개있는경우
11.2.5.40을가지고오게된이유
11.2.6.2를가지고오는경우
11.2.7.40을가지고오는경우
11.2.8.7,40,19에서최적의선택은?
11.2.9.2,7,40,19에서최적의선택은?
11.2.10.2,7,40,4,9에서최적의선택은?
11.2.11.dp[1][3]구하기
11.2.12.식으로j=2,j=3일때결과구하기
11.2.13.숫자를4개사용하는경우
11.2.14.코드로구현하기
11.2.15.함수선언하고n구하기
11.2.1

출판사 서평

알고리즘이매번새롭게느껴진다면?
슬기로운코딩생활을위한기본서를소개합니다.
매번공부할때마다새롭게느껴지는알고리즘.우리머리가나쁜걸까요?아니요,전혀그렇지않습니다.알고리즘은이해하고풀어보고코드를좀더발전시키는과정을계속해서반복해야합니다.그반복의시간이지났을때,여러분은더이상알고리즘이낯설게느껴지지않는것을경험할것입니다.

그동안코딩테스트를준비해야하지만,엄두조차내지못하셨다고요?그런여러분과알고리즘을이해하고문제를풀고,코드를발전시키는이반복의과정을함께하고자도서를제작했습니다.지금파이썬으로익히는말랑말랑알고리즘으로여러분의슬기로운코딩생활을만들어가세요.