1 minute read


  • 코딩 테스트에서 온라인 IDE를 이용하는 경우 자동으로 소스코드가 공개 상태로 온라인에 배포되지 않도록 주의해야 한다. 검색엔진에 노출되어 심사에서 부정행위로 간주되는 사례가 실제 종종 발생하므로, 공개 설정을 확인할 필요가 있다.
  • 대회 혹은 오프라인 코딩 테스트에 가져갈 수 있도록 허용하는 개인 코드 라이브러리를 ‘팀 노트’라고 부른다.
  • 삼성전자의 경우 DFS/BFS를 활용해야 하는 탐색과 시뮬레이션 문제 유형을 자주 출제한다. SW 익스퍼트 아카데미에서 난이도가 가장 낮은 A형에 먼저 응시해 보자(B형부터는 파이썬으로 응시할 수 없음).


  • 파이썬은 C++이나 자바에 비해 코드가 짧으며, 직관적이다. 몇몇 알고리즘을 구현할 때는 라이브러리를 추가할 필요 없이 코드를 작성할 수 있다. 문자열 처리도 다른 언어에 비해 간결하기 때문에 구현 위주의 문제에서 유리하다.
  • 채점 시스템이 파이썬3뿐만 아니라 PyPy3을 지원한다면 대체로 코드를 더 빠르게 실행할 수 있다. 하지만 어떤 상황에서는 일반 파이썬보다 느리게 동작할 수 있다. 따라서 아슬아슬하게 시간 초과 판정을 받는 경우에 PyPy3으로 변경해 제출해 보거나, 그 반대를 시도해 볼 수 있다.
  • 카카오는 특정 서버와 데이터를 주고받으며 통신하는 방식의 문제를 꾸준히 출제하고 있다.


  • 실제 코딩 테스트를 치르는 환경이 온라인 IDE일 확률이 높기 때문에, 리플릿, 파이썬 튜터, 온라인 GDB 등의 온라인 IDE를 이용해 연습하는 것을 추천한다.


  • 메모리를 더 많이 사용해 시간을 비약적으로 줄이는 방법으로 메모이제이션 Memoization 기법이 있다.
  • 소스코드가 내부적으로 다른 함수를 호출한다면, 해당 내부 함수의 시간 복잡도까지 고려해서 시간 복잡도를 계산해야 한다.
  • 일반적으로 코딩 테스트에서는 최악의 경우에 대한 연산 횟수가 가장 중요하다.
  • O(1)상수 시간, O(N)선형 시간 등으로 부른다.


  • 제한 시간이 1초인 문제에서,
    • N의 범위가 500: 시간 복잡도가 O(N³)인 알고리즘을 설계하면 문제를 풀 수 있다.
    • N의 범위가 2,000: 시간 복잡도가 O(N²)인 알고리즘을 설계하면 문제를 풀 수 있다.
    • N의 범위가 100,000: 시간 복잡도가 O(NlogN)인 알고리즘을 설계하면 문제를 풀 수 있다.
    • N의 범위가 10,000,000: 시간 복잡도가 O(N)인 알고리즘을 설계하면 문제를 풀 수 있다.


  • 공간 복잡도 역시 빅오 표기법을 이용한다. 메모리 사용량에도 절대적 제한이 있으며, 기준은 MB 단위로 제시되는 것이 일반적이다.
  • 코딩 테스트 문제는 대부분 배열을 사용해 풀어야 하는데, 이는 대부분의 문제가 다수 데이터에 대한 효율적 처리를 요구하기 때문이다. 리스트의 크기가 1,000만 단위 이상이라면 알고리즘 설계를 의심해 보아야 한다.


  • 실제 프로그램의 수행 시간을 측정하는 것은 알고리즘의 효율성을 측정할 수 있는 가장 기본적인 방법이다. 수행 시간은 아래와 같은 코드로 측정한다. 코드의 성능 측정을 위해 시간 측정 라이브러리를 사용하는 습관을 기르는 것을 추천한다.
import time
start_time = time.time()

# 소스코드 부분

end_time = time.time()
print("time:", end_time - start_time)


  • 가독성을 해치지 않는 선에서 최대한 복잡도가 낮게 프로그램을 작성해야 한다.