이번에 작성할 내용은 코딩 테스트, 과제 테스트 등 면접 전 과정에 대한 글이다.
구직 활동을 하면서 코딩 테스트는 거의 열에 아홉은 본 거 같고, 과제 테스트는 10번 중 2번 정도 진행한 것 같다.
요즘 워낙 코딩테스트 플랫폼이 잘 되어있기 때문에, 기업 입장에서 상황만 좋다면 코딩 테스트 전형을 추가하지 않을 이유가 없다고 생각한다.
코딩 테스트
나는 파이썬으로 코딩 테스트를 준비했다. 코딩 테스트 준비는 몇 년 전부터 계속했었기 때문에 크게 어렵지는 않았다. 처음 코딩테스트를 준비할 때는 백준에서 풀었었다. 그 당시만 해도 프로그래머스에 그렇게 많은 수의 문제가 없었기 때문에 백준을 대체할 만한 국내 사이트는 없었다.
요즘은 백준보다는 프로그래머스를 많이 활용하는데 그 이유는 편하기 때문이다. 백준 같은 경우 입출력 처리를 직접 해야 되는 번거로움이 있다. 이게 별로 큰 작업이 아닌 것처럼 보일 수 있다.
하지만 나는 코딩 테스트를 풀 때 주피터 노트북에서 많이 하는데, 이렇게 되면 테스트 케이스에 대한 실험이 쉽지 않았다. 뭐 방법이야 찾으면 있겠지만, 방법을 찾아야 된다는 것부터가 불편했다.
- 백준 코드 예시
def permutate(idx, Number,M):
if Number==[]:
pass
elif len(Number) == M :
result.append(Number)
return
for i in range(idx,N):
permutate(i, Number+[numbers[i]], M)
# 입력 처리
N, M = list(map(int,input().split()))
result = []
visited = [0] * (N)
numbers = list(map(int,input().split()))
numbers.sort()
permutate(0,[],M)
temp_= []
for temp in result:
temp_.append(tuple(temp))
result = sorted(list(set(temp_)))
# 출력 처리
for num in result:
for n in num:
print(n,end=' ')
print('')
그리고 프로그래머스는 문제를 풀고 실행시키는 환경이 매우 친절하다. 그래서 요즘은 그냥 프로그래머스에서 문제를 푼다. 예전과 달리 문제 수 도 많아져서 불편함이 없다.
- 프로그래머스 예시
파이썬 코딩테스트 준비
나는 코딩 테스트를 준비할 때 기초 알고리즘 정리
- 해당 알고리즘 유형 문제 풀이
- 복습
순서로 진행한다. 위 과정만으로도 웬만한 코딩 테스트 준비는 무리가 없고, 기초 알고리즘은 아래 유형의 알고리즘에 대한 정리를 해놓았다.
- DFS / BFS
- 다익스트라 / 플루이드 와샬
- 그리드
- 순열 / 조합
- 이진 탐색
- DP
- 시뮬레이션
위 와 같은 알고리즘 별 코드를 정리해 둔 이유는 똑같은 알고리즘이라도 구현하는 방식이 다른기 때문에 내가 이해하기 쉬운 방식으로 코드를 정리해 두는 게 나중에 다시 봐도 이해하기 쉬웠기 때문이다. 매번 코딩 테스트를 준비할 때 시간이 오래 걸려서, 러닝 커브를 낮추기 위한 방법으로 내가 선택한 것이다. (사실 위와 같은 정리를 해둔 것도 얼마 되지 않았다..)
- 알고리즘 정리 예시
무튼 위와 같이 알고리즘 유형에 맞게 기본적인 코드를 작성해 두고 해당 유형의 고난도 문제를 몇 가지 선별해 두었다. 그리고 코딩테스트를 진행해야 한다면, 고난도 문제를 풀어본다. 해당 내용은 아래 링크에 정리해 두었다.
SQL 코딩테스트 준비
요즘 알고리즘 코딩테스트뿐만 아니라 데이터 직군의 경우 SQL로 코딩테스트를 진행하는 곳이 종종 있다. 지금은 회사에서 DB를 종종 사용해서 크게 무리는 없는데, 처음 준비할 때는 너무 막막했다. 그래서 유튜브의 힘을 빌려 기초를 빠르게 훑고 문제 풀이 위주로 학습을 했다.
나는 이수안 컴퓨터 연구소의 영상을 참고했다. 영상 업로드 기간이 조금 오래되긴 했지만, 코딩테스트만을 준비하는데 손색이 없다고 생각한다. 추가적으로 위 유튜브에는 MySQL뿐만 아니라 다양한 언어의 실습 영상이 많으니 둘러보는 것도 좋을 거 같다.
문제 풀이는 파이썬과 동일하게 프로그래머스에서 진행했다. 아래 사진처럼 필터로 언어 - MySQL
를 적용해 주면 SQL관련된 문제만 볼 수 있다.
과제 테스트
맨 처음 언급한 것처럼 코딩 테스트뿐만 아니라 과제테스트를 수행하는 곳 종종 있다. 과제 테스트는 보통 지원한 직무와 관련된 것이 일반적이며 기간은 보통 1주일 내외이다. 사실 내가 무직상태에서 1주일 정도의 기간이 주어진다면, 어떤 과제테스트라도 무리 없이 진행할 수 있을 것이다. 다만 이직 준비의 경우 보통 재직 중에 하기 때문에 시간적 여유가 많지 않다. 그리고 한 번에 여러 개를 진행해야 할 수도 있다.
그래서 나는 과제테스트를 진행할 때, 문제 해결을 위한 프로토 타입을 만들고, 시간이 날 때마다 다양한 아이디어와 리서치해야 할 목록들을 정리했다. 만약 회사에 다녔다면, 출퇴근하는 시간을 활용했을 꺼같다. 무튼 내가 수행했던 과제테스트들에 대해 대략적으로 소개하고 어떻게 준비할 수 있는지 작성해 보았다.
A사 과제 테스트
해당 회사에서 내가 지원한 직무는 AI Research - 추천이었다.
그래서 추천 시스템을 구현하는 과제 테스트를 수행했다. 구현 내용은 아래와 같았다.
- 유저 log 데이터 EDA
- 유저 log 데이터를 기반으로 추천 시스템 구현
- 추천 시스템을 구현한 알고리즘에 대한 설명과 해당 알고리즘을 사용한 이유
해당 과제를 수행하기 위해 첫 벌째로 추천 부분의 SOTA 모델들을 탐구했다. SOTA 모델은 Paper with code 사이트에서 찾았다. AI를 공부하면 한 번쯤은 들락거리게 되는 사이트라고 생각되는데, 해당 사이트는 아래처럼 특정 task에 대한 SOTA 모델과 만약 코드가 공개되어 있다면, 사진처럼 깃허브 링크가 첨부되어 있다.
그래서 평소에 오픈소스를 자주 활용하는 사람이라면 어떤 task라도 빠르게 프로토 타입을 만들 수 있다. 요즘 오픈소스가 워낙 많기 때문에 아직 한 번도 사용 안 해본 사람이라면 오픈 소스 사용을 익숙하게 만드는 것이 꼭 필요하다고 말해주고 싶다. 업무 효율뿐만 아니라 기본적인 코딩능력 향상에도 도움이 되기 때문이다.
B사 과제 테스트
해당 회사에서 내가 지원한 직무는 MLops이었다.
직무 명만 MLops였고, 지원 자격이나 우대 사항을 보았을 때 ML Engineer의 업무와 동일해 보였기 때문에 지원하였는다. 그런데 과제 테스트는 AI Backend 관련된 과제가 제출되어 많이 당황스러웠다..
- Restful API 구현
- DB 설계
- User CRUD 화면 제작
- 테스트 케이스 작성
사실 위 내용들을 간단하게 설계한다면 어렵지 않을 거 같은데, 제약사항이 꽤 많았어서 나한테는 너무 어려웠다.
(너무 상세한 내용은 문제가 될 수 있기 때문에 기술하지 않음)
그리고 애초에 구현을 python이 아닌 다른 언어로 했어야 해서 좀 막막했다. 그래서 담당자에게 양해를 구하고 python으로 과제를 수행해도 되겠냐고 물어봤고, 흔쾌히 수락해 주어 나는 python으로 과제를 작성해 제출했다.
그리고 해당 과제도 프로토 타입을 우선 만드려고 했는데, 시간이 막 여유롭지 않아서 나는 chat-gpt
의 힘을 빌려보았다.
아래처럼 사용할 언어, 라이브러리, 구체적인 요구사항을 입력해 주면 chat-gpt
가 프로토 타입을 만들어준다.
근데 작동 안 할 수 도 있다
해당 코드를 그대로 사용하는 것은 지양하며 말 그대로 프로토 타입으로 활용해 초기 작업 시간을 단축시키는데 활용하면 좋을 것 같다.
여기까지 내가 진행했던 과제테스트를 다뤄보았다. 사실 몇 개 더 있는데, 위 내용과 비슷한 경우라서 딱히 작성하지는 않았다.
그리고 혹시나 과제테스트가 조금 걱정되는 사람들이 있다면 공모전을 참가해 보길 추천한다. Kaggle이나 Dacon에서 진행되는 대회가 사실 과제 테스트랑 프로세스가 거의 동일하다.
내가 지원하려는 직무가 확고하다면 해당 직무와 관련된 대회를 2~3개만 진행해 봐도 과제 테스트 통과는 어렵지 않을 것이라 생각한다.
무이것으로 코딩 테스트와 과제 테스트에 대한 글을 마무리하고, 다음에는 면접과 관련된 이야기로 주니어 머신러닝 엔지니어의 이직기 시리즈를 마무리하려고 한다.
'기타 > 일상' 카테고리의 다른 글
주어니 머신러닝 엔지니어의 이직기 (4) (0) | 2023.12.24 |
---|---|
주니어 머신러닝 엔지니어의 이직기 (2) (0) | 2023.11.19 |
주니어 머신러닝 엔지니어의 이직기 (1) (2) | 2023.09.24 |