코딩인터뷰 완전분석 - 게일 라크만 맥도웰
진행방법
- 스터디 시작 전까지 공부한 내용 중 궁금한 내용이나 모르는 것들은 생각해오거나 적어온다. (자유)
- 스터디 당일 랜덤으로 해당토픽에 대해 설명할 사람을 뽑는다.
- 자신이 궁금했던 내용에 대한 부분이 나오면 질문하고 서로 자유롭게 토의한다.
- 스터디가 끝난 후 해결하지 못한 내용이나 질문은 따로 정리해서 다음 스터디까지 해결해서 공유한다.
진행일정 (매주 Wed 7:30~)
● 1주차 7월 4일
VI. big-O
- 비유하기 
- 시간 복잡도 
- 공간 복잡도 
- 상수항은 무시하라 
- 지배적이지 않은 항은 무시하라 
- 여러 부분으로 이루어진 알고리즘: 덧셈 vs. 곱셈 
- 상환 시간 
- log N 수행 시간 
- 재귀적으로 수행 시간 구하기 
- 예제 및 연습 문제 
VII. 기술적 문제
- 준비하기 
- 알고 있어야 할 것들 
- 실제 문제 살펴보기 
- 최적화 및 문제풀이 기술 #1: BUD를 찾으라 
- 최적화 및 문제풀이 기술 #2: 스스로 풀어보라 DIY(Do It Yourself) 
- 최적화 및 문제풀이 기술 #3: 단순화, 일반화하라 
- 최적화 및 문제풀이 기술 #4: 초기 사례(base case)로부터 확장하기(build) 
- 최적화 및 문제풀이 기술 #5: 자료구조 브레인스토밍 
- 가능한 최선의 수행 시간(Best Conceivable Runtime(BCR)) 
- 오답에 대한 대처법 
- 알고 있던 문제가 면접에 나왔을 때 
- 면접용으로 ‘완벽한’ 언어 
- 어떤 코드가 좋아 보이나 
- 포기하지 말라 
● 2주차 7월 11일
IX. 면접 문제
자료구조
- 01 배열과 문자열 
- 해시테이블 
- ArrayList와 가변 크기 배열
- StringBuilder 
- 면접 문제 
 
- 02 연결리스트 
- 연결리스트 만들기
- 단방향 연결리스트에서 노드 삭제 
- Runner 기법 
- 재귀 문제 
- 면접 문제 
 
● 3주차 7월 18일
● 4주차 7월 25일
개념과 알고리즘
- 05 비트 조작 
- 손으로 비트 조작 해보기 
- 비트 조작을 할 때 알아야 할 사실들과 트릭들 
- 2의 보수와 음수 
- 산술 우측 시프트 vs. 논리 우측 시프트 
- 기본적인 비트 조작: 비트값 확인 및 채워넣기 
- 면접 문제 
 
- 06 수학 및 논리 퍼즐 
- 소수
- 확률 
- 입을 열라 
- 규칙과 패턴을 찾으라 
- 최악의 경우는? 
- 알고리즘적 접근법 
- 면접 문제 
 
● 5주차 8월 1일
- 08 재귀와 동적 프로그래밍 
- 접근법 
- 재귀적 해법 vs. 순환적 해법 
- 동적계획법 & 메모이제이션 
- 면접 문제 
 
● 6주차 8월 8일
● 7주차 8월 15일
- 04 트리와 그래프 
- 트리의 종류 
- 이진 트리 순회 
- 이진 힙(최소힙과 최대힙) 
- 트라이(접두사 트리) 
- 그래프 
- 면접 문제 
 
● 8주차 8월 22일
- 11 테스팅 
- 면접관이 평가하는 것 
- 실제 세계에서 객체 테스트하기
- 소프트웨어 테스팅
- 함수 테스트 
- 문제 해결에 관한 문제 
- 면접 문제 
 
● 9주차 8월 29일
● 10주차 9월 5일
- 09 시스템 설계 및 규모 확장성  (보너스)
- 문제를 다루는 방법 
- 시스템 설계: 단계별 접근법 
- 규모 확장을 위한 알고리즘: 단계별 접근법 
- 시스템 설계의 핵심 개념 
- 데이터베이스 분할(샤딩) 
- 시스템 설계 시 고려할 점 
- ‘완벽한’ 시스템은 없다 
- 연습 문제 
- 면접 문제