[Book Review] Python Algorithm Interview (1)

[Book Review] Python Algorithm Interview (1)

1. 코딩 테스트

종류
온라인 코딩 & 손코딩

온라인 코딩 테스트 플랫폼

  • 해커랭크
  • 코딜리티
  • 리모트 인터뷰
  • 프로그래머스

카카오 : 해커랭크 (테스트케이스 X), 일부는 하드웨어 현업 구현 문제
네이버 : 코딜리티
네이버 웹툰 : 해커랭크
라인 : 프로그래머스
신입공채 (네이버 카카오) : 프로그래머스
삼성전자 : 자체플랫폼, Visual Studio in Window,

준비물
연습장 필기도구

코드 스니펫
자주 쓰이는 동작들에 대한 코드 스니펫 준비

테스트 케이스
모든 테케 통과하도록 만들어야함

타임아웃
파이썬 – 알고리즘 최적화고민

IDE (통합개발환경) VS emacs vim ?
개발의 편의를 위해 IDE 선택

기타

  • 예외 처리하기
  • 문제별 풀이시간 정해두기
  • REPL 자주 사용 (read evaluate priint loop)
  • pycharm에선 reormat code로 쉽게 정렬가능
  • 네이밍 컨벤션 : _ snake case

화이트보드 인터뷰 평가기준
문제해결 / 코딩 / 검증 / 커뮤니케이션




2. 알아두면 좋을 것들

자료형 명시

def fn ( a : int ) -> bool :

함수의 파라미터 a가 정수형 / 리턴값으로 true , false 반환

타입 오류 확인
mypy로 코딩 테스트 할 때 타입 오류 확인 가능

pip iinstall mypy

list comprehension

in list

list ( map ( lambda x : x + 10, [1,2,3] ) )
[ n * 2 for n in range (1, 10 + 1 ) if n % 2 == 1 ]
설명 : map은 전달받은 리스트를 하나씩 꺼내 함수에 적용시켜 새로운 리스트에 담아줌

in dictionary

a = { key : value for key, value in original.items() }

Generator

def get_natural_number () : 
  n = 0
  while True:
    n += 1
    yield n
ㅤ
g = get_natural_number()
for _ in range (0, 100):
print (next (g) )

range

list ( range (5) ) [0,1,2,3,4]
a = [ n for n in range ( 10000 ) ]

enumerate
여러가지 자료형 ( list, set, tuple 등 ) 을 인덱스를 포함한 enumerate 객체로 리턴

a = [1,2,3,4,5]
list ( enumerate (a) )
[ (0,1), (1,2), (2,3), (3,4), (4,5) ] 
-> for i, v in enumerate (a) :
     print(i,v)
``

나머지

5 / 3 = 1.6666 (float)
5 // 3 = 1 (int) == int (5 / 3)
5 % 3 = 2 (나머지)
divmod (5,3) = (1,2) (몫과 나머지)

print

print(‘A1’, ‘B2’, sep= ‘,’)  // , 로 구분해서 출력
print(‘aa’, end=’ ’) // print 여러개 일열로 출력
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
a=[‘A’, ‘B’]
print(‘ ‘,join(a))   // 이어서 출력

포맷팅

idx = 1
fruit = “Apple”
ㅤㅤ
print(‘{0}’: {1}’.format(idx+1,fruit))
print(‘{}’: {}’.format(idx+1,fruit))
print( f’{idx + 1}: {fruit}’)

pass (오류를 방지)

class MyClass (object):
def method_a(self):
  pass
ㅤ
def method_b(self):
  print(‘B’)
ㅤ
C = MyClass()
locals

pprint

import pprint
pprint.pprint(locals())

클래스 메소드 내부의 모든 로컬변수를 출력해주기 때문에 디버깅에 도움이됨

실용적인 코드를 위해 참고
파이썬의 PEP 8
파이썬 스타일 가이드

list 작성시 줄바꿈 적극 활용

함수 인수 불변객체 사용하기
def foo (a, b = None)
def foo (a, b: Oprional [Sequence] = None):

if 사용법
if not users: (len=0보다 안전, 길이가 없다는 뜻이 결국 값이 없다는 것)
if foo == 0: (정수 판별 시 비교대상이 되는 정수값을 직접 비교)

빅 오
점근적 실행 시간 표기시 많이 사용, 입력값 n이 무한대로 향할 때 함수의 실행 시간 추이

시간복잡도 : 알고리즘 수행 시 걸리는 시간을 설명하는 계산 복잡도
빅오 : 시간복잡도를 표현할 때 최고차항만을 표기

빅오 : 상한
빅오메가 : 하한
빅세타 : 평균

분할상환분석 (Amortized Analysis)
=상각 분석
최악의 경우를 여러 번 걸쳐 골고루 나눠주는 형태로 알고리즘의 시간복잡도 계산

좋은 웹페이지 즐겨찾기