일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 탄력근무
- maven
- 백엔드공부
- array
- 탐색알고리즘
- YBM전화영어
- 제로베이스
- 백엔드스쿨
- 교육철학과 교육사
- OpenAPI프로젝트
- OAuth
- 원격근무
- 시급합니다
- npm
- java
- 자료구조
- 그래프탐색
- 전화영어
- 백엔드
- Node.js
- webServlet
- 최단경로문제
- 내돈내산
- 프로젝트진행
- 개발자
- BFS
- JavaScript
- 자바스크립트
- Queue
- Spring
- Today
- Total
개발자취
테스트 케이스가 통과된 뒤 본문
1. 들어가며
백엔드 신입 개발자가 쌓아야 하는 역량은 자료구조와 알고리즘을 이해하고 있고, 이를 코드에 적용하는 것이다. 게다가 시간복잡도는 낮고, 코드는 잘 읽히게 코드 컨벤션을 고려해서 코드를 작성해낼 줄 안다면 기본은 갖추고 있다고 할 수 있을 것이다. 그래서 정해진 시간 내에 알고리즘과 자료구조를 잘 녹여낸 코드를 작성해내는 역량이 중요하다보니, 실무 전에 개발 역량을 코딩테스트로 체크하기도 한다.(기업 by 기업이지만, 필자는 코딩테스트를 요구하는 기업에 지원하여 코딩테스트를 여러번 본 경험이 있다. 애석하게도 통과된 적은 아직 없다.) 코딩테스트는 앞서 언급한 자료구조, 알고리즘을 잘 이해하고 있는지를 정량적으로 평가할 수 있다보니, 채용 시스템에서 인터뷰 전에 코딩테스트를 응시하도록 하고 있다. (인터넷 없이 면접관 앞에서 라이브코딩으로 코딩테스트를 본 적도 있다.) 그래서 이번 글에서는 코딩테스트의 중요성을 인지한 필자가 zb에서 응시한 코딩테스트들을 보고 난 뒤 느낌을 간단하게 정리해보고, 테스트를 통해 앞으로 보완이 필요하다고 인지한 개념들을 체크리스트로 작성해 볼 것이다.
2. Pre 코딩테스트 후기
지난 3주간 진행된 Pre 코딩테스트를 통해 현재 어떤 파트의 공부가 필요한지에 대해 얼추 가늠해볼 수 있었다. 그 전에 코딩테스트에 관련된 후기를 짧게 풀어내보겠다.
1주차 때는 선형 자료구조로 풀 수 있는 문제들만 출제되어 프로그래머스 입문 정도의 난이도로 체감했고, 그 수준으로 풀 수 있었다. 그래서 생각보다 쉽게 출제된 문제들이어서 다소 쉽게 해결했다. 2주차 때도 마찬가지로 계산기를 제외하고는 비선형 자료구조와 선형 자료구조를 중심으로 출제되어서 그래도 그나마 쉽게 해결할 수 있었다. 반면, 3주차 때는 알고리즘과 관련된 문제들이 굉장히 많이 출제되었다. 최근에 배운 개념으로 단번에 풀기에는 어려움이 많았다. 그래서 테스트케이스 1개 정도 통과되게끔 코드를 작성해 제출한 문제도 있고, 지금까지 봐온 문제들에 비해서는 난이도가 급등한 느낌이었다. 로직을 짤 때 고민을 하는 시간을 많이 들여야 해서 풀이 시간(3시간)이 금방 흐르기도 했다.
문제를 더 많이 풀어보고 더 많이 접해봐야 할 것이라는 생각이 든다. 다만, 코딩테스트 문제를 풀어볼 때 뇌에 각인하기 위한 충분한 시간을 투자할 필요는 있어 보인다. 머리에서 금방 꺼낼 수 있는 시스템을 구축해 놓는 게 우선이기 때문이다. 물론 시간을 너무 오래 끌면 안되겠지만, 그래도 초심자 입장이니 최소 1시간 정도는 생각해봐야 하지 않을까 싶다. 그래서 지금 하는 공부방법을 유지하면서 지금까지 학습하면서 부족하다고 느낀점들을 체크리스트로 작성하여 이를 보완하는 방식으로 공부 방향을 잡을 것이다.
3. 체크리스트 작성
앞서 언급한 코딩테스트를 위한 공부 방법 보완은 다음과 같이 크게 세 부분으로 나눴다. 자료구조, 알고리즘, 시간복잡도 이다. 이렇게 세 부분으로 나눈 이유는 위 세가지를 모두 고려하지 못하면 문제에서 요구하는 테스트케이스가 하나라도 통과되지 않는 경우가 발생하기 때문이다. 시간적 여유가 없어서 테스트케이스를 놓친다면 어쩔 수 없지만, 최소한 미리 공부하지 않아서 노력을 하지 못하는 순간은 방지하기 위함이다. 어쨌든 코딩테스트 출제자가 낸 의도에 맞게 로직 구현을 하는 연습이 필요하다. 그래서 출제자의 의도로 코드를 작성하는 방법을 터득하기 위해 다음에 나열한 체크리스트를 보완할 것이다.
1) 자료구조를 능숙하게 다루기 위한 체크리스트
□ 배열에 담는 데이터의 타입이 object로 확장되게 연습
□ HashMap key, value 를 담는 수준을 넘어 정렬을 위한 자료구조 변환 연습
□ 정규표현식 작성에 관한 이해
□ 특정 정렬 기준 작성을 위한 lambda 함수 작성 연습
□ 행렬 풀이 문제에서 쓰이는 이차원 배열 문제에 관한 근본적인 이해 연습
2) 알고리즘을 능숙하게 다루기 위한 체크리스트
□ DFS, BFS를 사용하는 문제 풀이 연습(depth, order 등 관련 개념 이해 필요)
□ Trie 를 사용하여 문자열을 node로 생성하는 연습
□ DP 문제에서 규칙성을 빠르게 찾는 연습
□ 백트래킹 알고리즘을 사용하는 기초 문제 연습(좌표 잡고 이동, 가지치기 등)
□ 그리디 문제에서 조건을 구분하는 연습
□ 투포인터 문제로 푸는 방법 연습
□ 최단경로 문제 접근을 위한 기초 문제 연습(dijkstra, bellman ford, floyd warshall)
□ 최소신장트리 문제 접근을 위한 기초 문제 학습(kruskal, prim)
3) 시간복잡도 고려를 위한 체크리스트
□ O(n^2)형태로 작성 후 시간복잡도 개선에 대해 고민하기
□ 문제에서 준 입력값의 범위를 고려
□ 재귀 구조나 반복문으로 인한 시간초과 발생이 우려되는 함수 작성 시 탈출조건에 대해 좀 더 고민하고 사용
이 밖에도 부족한 점이 많이 있지만, 현재까지 인지한 부족한 점을 먼저 개선하고 난 뒤 체크리스트에 추가할 것이다. 그래서 순차적으로 해결하는 방식으로 진행할 것이다. 매일 푸는 문제가 늘 새롭지만 지금 아니면 언제 이렇게 밀도있는 공부를 하겠어.
'개발 > Dev | 테크트리' 카테고리의 다른 글
2023/6월 회고글 (0) | 2023.07.08 |
---|---|
백엔드 공부 파이프라인 구축.log (0) | 2023.07.07 |
개발에 문제 많습니다 (0) | 2023.06.17 |
나는 왜 Backend 엔지니어가 되어야 하는가 (0) | 2023.06.09 |
개발 경험이 쌓인다는 것 (2) | 2023.03.21 |