코딩인터뷰 완전분석 - 게일 라크만 맥도웰
진행방법
- 스터디 시작 전까지 공부한 내용 중 궁금한 내용이나 모르는 것들은 생각해오거나 적어온다. (자유)
- 스터디 당일 랜덤으로 해당토픽에 대해 설명할 사람을 뽑는다.
- 자신이 궁금했던 내용에 대한 부분이 나오면 질문하고 서로 자유롭게 토의한다.
- 스터디가 끝난 후 해결하지 못한 내용이나 질문은 따로 정리해서 다음 스터디까지 해결해서 공유한다.
진행일정 (매주 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 시스템 설계 및 규모 확장성 (보너스)
- 문제를 다루는 방법
- 시스템 설계: 단계별 접근법
- 규모 확장을 위한 알고리즘: 단계별 접근법
- 시스템 설계의 핵심 개념
- 데이터베이스 분할(샤딩)
- 시스템 설계 시 고려할 점
- ‘완벽한’ 시스템은 없다
- 연습 문제
- 면접 문제