이 상품은 구매 후 지원 기기에서 예스24 eBook앱 설치 후 바로 이용 가능한 상품입니다.
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. 자리 바꾸기 swap2.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장. 무차별 대입법[Brute Force]4.1. 통장 비밀번호 풀기4.2. 통장 비밀번호 푸는 알고리즘 개발하기4.3. 핵심 로직4.3.1. 0000부터 0009까지(0 0 0 h)4.3.2. 0000부터 0099까지(0 0 h j)4.3.3. 0000부터 0999까지(0 h j i)4.3.4. 0000부터 9999까지(h j i k)4.3.5. 입력받은 암호와 같으면 return5장. 스택[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. 해시 충돌(Hash Collision)6.5. 오픈 어드레싱(Open addressing)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장. 단순 탐색(Simple Search)과 이진 탐색(Binary Search)8.1. 심플 서치(Simple Search) - 단순 탐색8.2. 바이너리 서치(Binary Search) - 이진 탐색8.2.1. 중간값(mid index) 찾기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. 쌓이는 부분 만들기 accu10.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 : Greatest Common Divisor) 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장. 다이내믹 프로그래밍[Dynamic Programming]11.1. LCS(Longest Common Subsequence) 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. 최적의 전략(Optimal Strategy) 찾기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.16. 4 x 4의 표 만들기(dp)11.2.17. 숫자가 1개만 있는 경우11.2.18. 숫자가 3개 이상인 경우 11.3. 최소 비용 경로(Min Cost Path)11.3.1. 최소 비용 어떻게 구할까요?11.3.2. 단계별로 기록하기11.3.3. 코드로 최소 비용 알고리즘 구현하기11.3.4. 첫 번째 칸에 표시하는 로직11.3.5. 첫 번째 줄에 표시하는 로직11.3.6. j = 0일 때 처리하기 11.3.7. I 〉 0 and j 〉 0일 때 처리하기
|
김경록의 다른 상품
알고리즘이 매번 새롭게 느껴진다면?슬기로운 코딩 생활을 위한 기본서를 소개합니다. 매번 공부할 때마다 새롭게 느껴지는 알고리즘. 우리 머리가 나쁜 걸까요? 아니요, 전혀 그렇지 않습니다. 알고리즘은 이해하고 풀어보고 코드를 좀 더 발전시키는 과정을 계속해서 반복해야 합니다. 그 반복의 시간이 지났을 때, 여러분은 더 이상 알고리즘이 낯설게 느껴지지 않는 것을 경험할 것입니다. 그동안 코딩 테스트를 준비해야 하지만, 엄두조차 내지 못하셨다고요? 그런 여러분과 알고리즘을 이해하고 문제를 풀고, 코드를 발전시키는 이 반복의 과정을 함께 하고자 도서를 제작했습니다. 지금 파이썬으로 익히는 말랑말랑 알고리즘으로 여러분의 슬기로운 코딩 생활을 만들어 가세요.
|