내 인생을 코딩

데이터 엔지니어링 데브코스 2주차 - 월요일 본문

데이터 엔지니어링/TIL

데이터 엔지니어링 데브코스 2주차 - 월요일

Big_circle 2023. 4. 10. 17:19

 

학습주제

2주차 월요일 커리큘럼
[수업] 자료구조, 알고리즘(배열, 정렬/탐색, 재귀 알고리즘)
[특강] 코딩 테스트, 코딩 인터뷰

 

주요 내용

2주차의 주요 내용들은 본격적인 데이터 엔지니어링 관련 내용에 앞서 올바른 코드 구현과 코딩 테스트 대비를 위한 자료구조와 알고리즘 수업으로 구성되어 있다. 

 

프로그래머스에서 자료구조, 알고리즘 수업을 진행하고 계신 이시윤 멘토님의 코딩테스트 특강을 듣고 관련 내용을 정리했다.

(특강을 듣고 저의 방식대로 서술한 내용이므로 이시윤 멘토님의 강연 내용, 의도와는 상이할 수 있습니다.)


 

Q. 코딩테스트는 왜 하는가?

- 최소한의 문제 해결 능력을 검증하기 위해서 시행한다. 이때 최소한의 문제 해결 능력이란 문제의 분석과 해결 방법을 착안하고 이를 코드로 구현하는 능력을 말한다.

 

Q. 코딩테스트와 코딩인터뷰의 차이는?

- 코딩테스트는 문제를 푸는 결과 중심적인 과정이고, 코딩 인터뷰는 직무에 필요한 배경지식을 충분히 갖추고 있는지를 점검하고, 지원자가 생각한 바를 논리적으로 올바르게 전달할 수 있는지 등의 개발자가 갖춰야 할 전반적인 역량을 검사하는 전형을 말한다.

 

Q. 코딩 문제의 종류는?

- Implementation : 제시된 흐름에 따라 코드를 작성하도록 요구하는 문제

- Algorithm comprehension : 문제의 효과적/효율을 해법을 찾아내도록 요구하는 문제.

- Competency test : 특정한 자료구조와 알고리즘을 착안하여 제안시간 내에 문제의 답을 도출하도록 요구하는 문제(주로 고난도 문제)

- 기타 : SQL 등 특정 언어를 활용해서 푸는 문제

 

Q. 코딩 테스트를 대비하는 방법은?

크게 5가지 단계로 구분할 수 있다.

1. Python, C, Java 등 적어도 하나 이상의 언어로 코드를 구현할 수 있는 능력 갖추기

2. Array, Stack/Queue, Hash/Map, Tree, Graph 등 기본적인 자료구조에 대해 이해하기

3. 정렬, 탐색, 선택 등 기본적인 알고리즘과 그 알고리즘들의 시간/공간 복잡도에 대해 이해하기

4. 문제를 해결하기 위한 알고리즘 적용 해법을 착안하고 사고하는 훈련하기 **

5. 제한 시간 내에 오류없이 코드를 작성하고 디버깅할 수 있는 능력을 훈련하기 **

** 4번과 5번 과정을 충분히 반복, 숙달하여 모든 문제에 대응할 수 있도록 연습하는 것이 중요하다.

 

Q. 자료구조를 공부해야 하는 이유는?

- 자료구조는 문제 해결에 적용할 수 있는 도구가 되기 때문에 중요하고, 어떤 자료구조를 선택하느냐에 따라 적용할 수 있는 알고리즘도 달라지기 때문에 기본적인 자료구조를 이해하는 것이 굉장히 중요하다.

 

Q. 알고리즘을 공부해야 하는 이유는?

- 이미 많은 전문가들이 좋은 알고리즘을 연구해왔다. 또한, 복잡한 문제에 대한 해결방법을 바닥부터 고안해내는 것은 쉽지 않기 때문에 나와 있는 알고리즘을 이해하는 것이 중요하다. 이때 알고리즘 각각의 구현 절차와 성질을 무조건적으로 암기하는 것이 아니라 그것을 착안하는 생각의 흐름을 숙달하는 훈련이 필요하다.

 

Q. 문제를 해결하는 일반적인 프로세스?

- 문제 ▶ 추상화 ▶ 해법착안 ▶ 코드구현 과정으로 진행된다.

- 추상화 과정은 주어진 코테 문제의 본질을 이해하고 정보를 처리하는데 접근할 수 있도록 핵심을 추려낼 수 있어야 한다.

- 해법착안 과정에서는 해법을 구현하기 위한 적절한 자료구조와 알고리즘을 선택하는 어휘력이 필요하다.

 

Q. 코딩테스트에서 빠지기 쉬운 함정?

- 코드를 짧게 쓴다고 실행속도가 빨라지는 것은 아니다. 특히 파이썬에서 사용할 수 있는 index(), insert() 등의 메소드들은 코드를 단축시킬 수는 있지만 실행속도를 오히려 느리게 하는 함정이 된다.

- 코딩테스트는 일반적으로 많은 지원자에 대한 객관적인 평가 기준을 마련하기 위한 과정으로, 코딩테스트 제출 결과 점수로 불/합이 결정될 가능성이 많다. 지원자의 코딩 인벤션, 구조 등의 전반적인 역량은 차후 2차 테스트나 코딩 인터뷰 등으로 평가되는 경우가 일반적이다.

 

Q. 추가내용

- 문제 출제자 입장에서 고난도 문제를 출제할 때는 특정 자료구조와 알고리즘을 고려하는 경우가 많다.

 

코딩테스트를 준비하는 마음가짐을 새로 정립하는데 큰 도움이 된 특강이다. 특히, 문제를 해결하는 과정에서 필요한 프로세스들을 확실히 정리하게 되어서, 앞으로 코딩테스트를 준비하는데 큰 밑거름이 된 것 같다.