
구매문의 및 도서상담은 031-944-3966(매장)으로 문의해주세요.
매장전집은 전화 혹은 매장방문만 구입 가능합니다.
지은이 : 김아인
프롤로그: 그문제엔 이 함수를 써어야 했다
Part 1: itertools (모든 경우의 수 완전탐색)
Chapter 1. 문제 유형: "N개 중 순서 없이 R개 뽑기" (조합)
1-1. [문제 정의] "서로 다른 N개 중 순서를 고려하지 않고 R개를 뽑는 모든 경우"
1-2. [핵심 함수] itertools.combinations(iterable, r)
1-3. [실전 예제] 프로그래머스: "소수 만들기"
1-4. [풀이 전략] 3개의 숫자를 뽑는 모든 조합을 구해 합을 검사합니다.
Chapter 2. 문제 유형: "N개 중 순서 있게 R개 나열" (순열)
2-1. [문제 정의] "서로 다른 N개 중 R개를 뽑아 순서대로 나열하는 모든 경우"
2-2. [핵심 함수] itertools.permutations(iterable, r)
2-3. [실전 예제] 백준: "N과 M (5)"
2-4. [풀이 전략] N개의 숫자 중 M개를 뽑아 나열하는 모든 순열을 출력합니다.
Chapter 3. 문제 유형: "모든 순서 시도하기" (순열 응용)
3-1. [문제 정의] "주어진 작업들의 순서를 모두 바꿔가며 최적의 해를 찾기"
3-2. [핵심 함수] itertools.permutations(iterable, len(iterable))
3-3. [실전 예제] 프로그래머스: "피로도"
3-4. [풀이 전략] 던전을 탐험하는 모든 순열을 구해, 각 순서마다 최대 탐험 횟수를 갱신합니다.
Chapter 4. 문제 유형: "중복을 허용하여 R개 나열" (중복 순열)
4-1. [문제 정의] "서로 다른 N개 중 중복을 허용하여 R개를 뽑아 나열"
4-2. [핵심 함수] itertools.product(iterable, repeat=r)
4-3. [실전 예제] 백준: "N과 M (3)"
4-4. [풀이 전략] 1~N까지의 수를 repeat=M으로 중복 순열을 만듭니다.
Chapter 5. 문제 유형: "중복을 허용하여 R개 뽑기" (중복 조합)
5-1. [문제 정의] "서로 다른 N개 중 중복을 허용하여 순서 없이 R개를 뽑기"
5-2. [핵심 함수] itertools.combinations_with_replacement(iterable, r)
5-3. [실전 예제] 백준: "N과 M (4)" (비내림차순 수열)
5-4. [풀이 전략] 1~N까지의 수를 중복 조합으로 M개 뽑습니다.
Part 2: collections (자료구조 기반 계산)
Chapter 6. 문제 유형: "요소의 개수 세기" (해시 카운팅)
6-1. [문제 정의] "리스트나 문자열에 각 요소가 몇 개씩 있는지 빠르게 세기"
6-2. [핵심 함수] collections.Counter(iterable)
6-3. [실전 예제] 프로그래머스: "완주하지 못한 선수"
6-4. [풀이 전략] Counter(참가자) - Counter(완주자)로 차집합을 구합니다.
Chapter 7. 문제 유형: "애너그램 (문자열 구성 비교)"
7-1. [문제 정의] "두 문자열이 철자의 순서만 다르고 구성이 같은지 판별"
7-2. [핵심 함수] collections.Counter(str1) == collections.Counter(str2)
7-3. [실전 예제] 백준: "애너그램"
7-4. [풀이 전략] 두 문자열의 Counter 객체가 완전히 동일한지 비교합니다.
Chapter 8. 문제 유형: "최빈값 (가장 많이 나온 값)"
8-1. [문제 정의] "자료에서 가장 빈번하게 등장한 요소를 찾기"
8-2. [핵심 함수] Counter.most_common(k)
8-3. [실전 예제] 백준: "베스트셀러"
8-4. [풀이 전략] most_common(1)로 가장 빈도가 높은 1개를 찾습니다.
Chapter 9. 문제 유형: "최단 거리 탐색 (BFS)"
9-1. [문제 정의] "가중치 없는 그래프(맵)에서 최단 거리를 찾기"
9-2. [핵심 자료구조] collections.deque() (큐로 활용)
9-3. [실전 예제] 프로그래머스: "게임 맵 최단거리"
9-4. [풀이 전략] deque를 큐로 사용하여 BFS를 수행합니다. (Tip: list.pop(0)의 비효율성)
Chapter 10. 문제 유형: "슬라이딩 윈도우"
10-1. [문제 정의] "크기가 K인 창문을 이동시키며 범위 내의 값을 처리"
10-2. [핵심 자료구조] collections.deque() (양쪽에서 삽입/삭제가 빠름)
10-3. [실전 예제] 백준: "최솟값 찾기" (11003번)
10-4. [풀이 전략] deque를 사용해 범위 내의 최솟값 후보를 효율적으로 관리합니다.
Chapter 11. 문제 유형: "스택 (LIFO) 자료구조"
11-1. [문제 정의] "가장 나중에 들어온 데이터를 가장 먼저 처리 (LIFO)"
11-2. [핵심 자료구조] list (.append(), .pop()) 또는 collections.deque()
11-3. [실전 예제] 프로그래머스: "올바른 괄호"
11-4. [풀이 전략] 여는 괄호는 스택에 넣고, 닫는 괄호는 스택에서 빼며 짝을 맞춥니다.
Part 3: math (수치 연산 및 계산)
Chapter 12. 문제 유형: "최대공약수 / 기약분수"
12-1. [문제 정의] "두 수의 공통된 약수 중 가장 큰 값 / 분수를 약분하기"
12-2. [핵심 함수] math.gcd(a, b)
12-3. [실전 예제] 프로그래머스: "분수 덧셈"
12-4. [풀이 전략] 분모/분자를 gcd로 나누어 기약분수를 만듭니다.
Chapter 13. 문제 유형: "최소공배수 (공통 주기)"
13-1. [문제 정의] "두 수의 공통된 배수 중 가장 작은 값 (예: 버스 배차 간격)"
13-2. [핵심 함수] math.lcm(a, b) (3.9+) / (a * b) // math.gcd(a, b) (3.8 이하)
13-3. [실전 예제] 백준: "최소공배수" (1934번)
13-4. [풀이 전략] 코테 환경에 맞춰 lcm 함수를 사용하거나 직접 구현합니다.
Chapter 14. 문제 유형: "소수 판별 (시간 효율화)"
14-1. [문제 정의] "어떤 수
도서 DB 제공 - 알라딘 인터넷서점 (www.aladin.co.kr)