이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다.
1장 코딩 인터뷰
1) 코딩 인터뷰 종류
- 오프라인 코딩 인터뷰
면접관들 앞에서 오프라인으로 라이브 코딩하는 인터뷰 - 오프라인 화이트보드 코딩 인터뷰
면접관들 앞에서 화이트보드를 이용하여 설명/구현하는 인터뷰 - 온라인 코딩 인터뷰
면접관들 앞에서 온라인으로 라이브 코딩하는 인터뷰 - 온라인 코딩 테스트
플랫폼을 통해 문제를 푸는 테스트
※ 라이브 코딩 / 화이트 보드 / 코딩 테스트
2) 코딩 인터뷰를 위한 온라인 테스트 플랫폼
- 해커랭크 (카카오)
- 코딜리티 (네이버)
- 리모트인터뷰
- 프로그래머스 (대부분 기업들이 많이 사용하는듯, 네이버도 최근에 사용)
- 리트코드 (해당 책에서 사용)
3) 온라인 코딩 테스트
- 사전 준비사항
- 연습장 / 스니펫(Snippet)
최근 겪어본 코딩 테스트에서는 사용할 수 있는 경우가 거의 없었다.
- 연습장 / 스니펫(Snippet)
- 테스트 팁
- 모든 테스트케이스 통과
TDD가 아닌 문제에 맞는 효율적인 알고리즘 사용을 요구 - 타임아웃
파이썬은 다른 언어에 비해 알고리즘 최적화가 더욱 요구됨 - 예외처리
처음부터 예외 처리를 하고 진행 - 제한 시간
한 문제에 대해 잘못 접근한 경우, 시간을 정하여 다음 문제로 넘어가기 - 메일 보내기
테스트 시간이 끝난 후 문제를 풀어도 끝까지 메일로 제출해보기 (경우에 따라 다르겠지만, 스스로에게 좋을듯) - IDE 사용하기 (+REPL)
최근 겪어본 코딩 테스트에서 사용을 금지하는 경우도 보았다.
- 모든 테스트케이스 통과
※ 알고리즘 분류 -> 설계 -> 예외처리 -> 구현 -> 검증 -> 제출
4) 화이트보드 코딩인터뷰
- 핵심을 관통하는 알고리즘을 중심으로 구현
- 모르는 알고리즘은 면접관에게 끊임없이 질문 필요
- 실제 실행되는 수준의 정확한 구현 요구
- 평가 요소
- 문제해결
- 코딩
- 검증
- 커뮤니케이션
- 수도코드(Pseudocode) 사용
2장 프로그래밍 언어 선택
1) 코딩 테스트 중심 파이썬 특징
- 루프
- range() 사용
- 한 줄 처리가 가능하지만 가독성 주의
# 예시 1
sum = 0
for i in range(1,10 + 1):
sum += i
# 예시 2
sum = sum( i for in range(1, 10 + 1))
# 예시 3
sum = sum(range(1, 10+1))
- 제네릭 프로그래밍
- 파라미터 타입이 나중에 지정되어 재활용성을 높이는 프로그래밍
- 파이썬은 동적 타이핑(Dynamic Typing) 언어이므로 제네릭이 필요없음
- 코드의 복잡도가 높아질수록 혼란을 가중
from typing import TypeVar
T = TypeVar('T')
U = TypeVar('U')
def are_equal(a: T, b: U) -> bool:
return a == b
are_equal(10, 10.0)
- 배열 반복
- 자료형 선언이 필요 없으므로 매우 간결
ex. Java의 foreach - 지나친 간결함이 코드의 복잡도에 따라 가독성을 낮춤
- 자료형 선언이 필요 없으므로 매우 간결
// Java
String[] foo = new String[]("A", "B", "C");
for (String f : foo){
System.out.println(f);
}
# Python
foo = ['A', 'B', 'C']
for f in foo:
print(f)
- 구조체
- Python 3.7+부터 Decoration(Annotation)으로 타입 힌트와 함께 class를 구조체 형태로 정의
- 이렇게 선언할 경우
1) 초기화 함수를 사용할 수 있음
2) 읽기 쉬운 포맷으로 출력 가능
# Python 3.7+
from dataclasses import dataclass
@dataclass
class Product:
weight: int = None
price: float = None
apple = Product()
apple.price = 10
- 클래스
- 코딩 테스트에서는 클래스를 많이 사용하지 않음
- dataclass decoration을 이용해 class 선언
- dataclass 선언 없이 클래스 구현 가능
- dataclass 선언시 여러 가지 내부 함수의 기능이 자동으로 구현
from dataclasses import dataclass
@dataclass
class Rectangle:
width: int
hegith: int
def area(self):
return self.width * self.height
rect = Rectangle(3, 4)
print(rect.area())
※ 제너릭 / 구조체 / 클래스
※ 코드의 복잡도에 따라 가독성이 떨어질 수 있음
2) 코딩테스트 중심 파이썬의 장단점
- 면접관이 쉽게 이해할 수 있는가?
- 쉬워서 익숙하지 않은 사람도 간단한 문법만 알려주면 금방 이해할 수 있음
- pseudo code 포맷으로도 사용 가능 - 코딩 플랫폼에서 지원하는가?
- 일부 기업에서 제한하는 경우가 있음 - 유연한 언어인가?
- 정적 타이핑 언어는 알고리즘을 빠르게 구현해야하는 환경에서 생산성을 저해하는 요인
- 파이썬은 동적 타이핑 언어
- 그러나 가급적 구현 후 잘못 선언한 변수나 사용하지 않는 변수를 검토할 것 (실무에서도 좋은 습관) - 언어 레벨에서 풍부한 기능을 지원하는가?
- 코딩 테스트는 외부 라이브러리를 전혀 사용할 수 없음
- C 같은 경우, 모든 자료구조를 직접 구현해야하기 때문에 불리함
- 파이썬은 언어 레벨에서 이미 풍부한 기능을 내장하고 있음
- 이 때문에 일부 기업에서 파이썬으로 코딩 테스트를 제한함
※ 알고리즘을 빠르게 구현해야하는 코딩 테스트 측면에서는 동적 타이핑 언어인 파이썬의 생산성이 비교적 더 높음
'책읽기' 카테고리의 다른 글
[파이썬 알고리즘 인터뷰][문자열] 유효한 팰린드롬 (0) | 2021.07.16 |
---|---|
[데이터 분석을 위한 SQL 레시피][1장] 빅데이터 시대에 요구되는 분석력이란? (0) | 2021.07.15 |
[파이썬 알고리즘 인터뷰] 2부 - 파이썬 (~ 5장 - 리스트, 딕셔너리) (0) | 2021.07.12 |
[파이썬 알고리즘 인터뷰] 2부 - 파이썬 (~ 4장 - 빅오, 자료형) (0) | 2021.07.09 |
[파이썬 알고리즘 인터뷰] 2부 - 파이썬 (~ 3장 - 파이썬) (0) | 2021.06.29 |