알고리즘 스터디 일정

코딩인터뷰 완전분석 - 게일 라크만 맥도웰

진행방법

  • 스터디 시작 전까지 공부한 내용 중 궁금한 내용이나 모르는 것들은 생각해오거나 적어온다. (자유)
  • 스터디 당일 랜덤으로 해당토픽에 대해 설명할 사람을 뽑는다.
  • 자신이 궁금했던 내용에 대한 부분이 나오면 질문하고 서로 자유롭게 토의한다.
  • 스터디가 끝난 후 해결하지 못한 내용이나 질문은 따로 정리해서 다음 스터디까지 해결해서 공유한다.

진행일정 (매주 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일

  • 03 스택과 큐
    • 스택 구현하기
    • 큐 구현하기
    • 면접 문제

● 4주차 7월 25일

개념과 알고리즘

  • 05 비트 조작
    • 손으로 비트 조작 해보기
    • 비트 조작을 할 때 알아야 할 사실들과 트릭들
    • 2의 보수와 음수
    • 산술 우측 시프트 vs. 논리 우측 시프트
    • 기본적인 비트 조작: 비트값 확인 및 채워넣기
    • 면접 문제
  • 06 수학 및 논리 퍼즐
    • 소수
    • 확률
    • 입을 열라
    • 규칙과 패턴을 찾으라
    • 최악의 경우는?
    • 알고리즘적 접근법
    • 면접 문제

● 5주차 8월 1일

  • 08 재귀와 동적 프로그래밍
    • 접근법
    • 재귀적 해법 vs. 순환적 해법
    • 동적계획법 & 메모이제이션
    • 면접 문제

● 6주차 8월 8일

  • 10 정렬과 탐색
    • 널리 사용되는 정렬 알고리즘
    • 면접 문제

● 7주차 8월 15일

  • 04 트리와 그래프
    • 트리의 종류
    • 이진 트리 순회
    • 이진 힙(최소힙과 최대힙)
    • 트라이(접두사 트리)
    • 그래프
    • 면접 문제

● 8주차 8월 22일

  • 11 테스팅
    • 면접관이 평가하는 것
    • 실제 세계에서 객체 테스트하기
    • 소프트웨어 테스팅
    • 함수 테스트
    • 문제 해결에 관한 문제
    • 면접 문제

● 9주차 8월 29일

  • 07 객체 지향 설계 (보너스)
    • 접근법
    • 디자인 패턴
    • 면접 문제

● 10주차 9월 5일

  • 09 시스템 설계 및 규모 확장성 (보너스)
    • 문제를 다루는 방법
    • 시스템 설계: 단계별 접근법
    • 규모 확장을 위한 알고리즘: 단계별 접근법
    • 시스템 설계의 핵심 개념
    • 데이터베이스 분할(샤딩)
    • 시스템 설계 시 고려할 점
    • ‘완벽한’ 시스템은 없다
    • 연습 문제
    • 면접 문제