후기

[후기] '코딩테스트 잘 푸는 방법' 세미나

IT록흐 2023. 12. 23. 10:19
반응형


코딩테스트 잘 푸는 방법 세미나  (  2023.11.16 목요일 )

강사 : 권우영 ( 현 구름 서비스 기획자 )

 

[ 후기 ]

 

막연하게 백준 문제를 풀면서 티어만 올리고 있던 나의 뼈를 때리는 세미나였다.  세미나를 듣고 난 후 보이지 않았던 많은 부분들이 보였고 자신감과 가능성을 느낄 수 있는 시간이었다. 

 

[ 세미나 요약 ] 

 

쉬운문제를 여러번 매일 풀어라


취업을 하고 싶은 회사의 언어를 선택하여 쉬운 문제를 여러번 풀어 활용능력을 높여야 한다. 

길이가 긴 문제를 한 문장으로 정리하는 능력을 연습해야한다. 


한문장으로 정리하여 문제를 푸는 연습을 해야 한다. 요구사항을 정리하고 풀이방법을 정리하여 풀이가 왜(why) 틀렸는지를 이해해야 한다.  요구사항과 풀이법 간의 상관관계를 찾아 '특정 조건'이 나오면 '다익스트라'이다 '이분탐색'이다 등의 발상력을 키워야 한다.  

다시 말하여, 정리하는 연습이 중요하다. 

생각보다 많은 알고리즘을 알 필요가 없다.

필수 알고리즘 
- 시뮬레이션 ( 요구사항을 얼마나 빨리 파악하는가 )
- 정렬 ( 정렬이 필요한 건지 아닌지 )
- 완전탐색

웬만하면 학습
- 자료구조
- 기본적인 탐색
- 동적프로그래밍/그리디

위 6가지 선에서 능력을 올려주는 것이 좋다.  트리를 알면 좋고 dp를 알면 좋고 세그먼트 트리의 깊이를 알면 좋지만 활용할 수 있는가?는 다른 문제이다.  6개 외에 다른 것을 공부하면 좋지만 시간과 효율을 따져봐야 한다. 


얼마나 오래? 얼마나 많이?

시간적 여유가 없으면 다른 코드를 바로 참고하는 것이 좋다. 만약 아쉽게 틀린 문제라 다른 문제를 푸는 것을 추천한다. 다른 문제를 풀다가 뜬금없이 떠오르는 경우가 있다. 떠오르지 않으면 다른 사람 코드를 참고해도 된다. 그러다 보면 실수한 부분이 보인다. 다음에 실수를 안하면 된다. 

 

요구사항 파악은 되는데 풀이방법이 떠오르지 않는다면 개념을 모르는 것이다. 풀이방법을 고민하는 것은 하루면 충분하다. 요즘은 잘하는 사람 보다는 잘 이해하는 사람을 뽑으려 한다.

 

꾸준함이 중요하다. 티어 달성이 아니라 코딩테스트가 통과가 목표이다.  꾸준하게 공부를 하고 시험에 맞추어서 공부를 하는 것이 좋다. 
시간이 더 중요하다. 얼마나 많이 풀어야 하는가? 보다는 꾸준하게 공부하는 것이 중요하다.

 

요구사항 파악은 한번에


요구사항을 파악할 때 문제를 여러 번 읽는 사람이 많다.  요즘 알고리즘 문제가 짧지도 않다. 문제가 엄청 길다.  그걸 두번 세번 읽으면 10분이 넘게 나간다.  요구사항 파악할 때, 처음에는 잘 안될 수 있는데,  문제 시작하자마자 메모장에 문제를 정리하는 사람이 합격률이 높다. 2가지를 한달만 꾸준히해도 기계처럼 잘해질 것이다. 

 

 

회사에서 코딩테스트를 보는 이유

코딩테스트는 알고리즘을 잘하는 사람을 뽑는 시험이 아니다.

1) 수준파악 ( 응시자의 수준을 파악하는 상시, 소규모 코딩테스트 ) 
=> 오히려 난이도가 어렵다.
=> 적당한 난이도에 맞는 것으로 풀기

2) 거름망 ( 다수를 대상으로 하는 최소한의 거름망 )
=> 단순하게 못하는 친구들 빼내려는 개념이 크다. 
=> 1번부터 차근히 풀기, 못하는 애들 거르기 위함


모의 코딩테스트를 자주 보아야 한다.

프로그래머스든 무엇이든 주관사의 환경에서 모의고사를 봐야 한다. 환경에 익숙해지는 연습을 해야 한다. 아무리 문제를 잘 푸는 사람도 환경이 다르면 당황할 수 있다. 시험이 가깝다면 환경에 익숙해져야 한다.  그러므로 무작정 아무 코딩 테스트를 응시하는 편이 도움이 된다. 블라인드 코테와 같이, 여기저기 응시할 수 있는 곳이 많다. 모의코테를 자주보아 시장에서의 나의 위치를 찾아야 한다. 어느 순간부터 계속 합격한다면 코테를 볼 준비가 된 것이다.  100-150문제 정도 풀었다고 했을때 무차별적으로 코딩테스트를 지원해봐라. 모든 회사든 문제 은행을 쓰고 있다. 언제든 같은 문제를 쓰고 있다. 

 


발목 잡히지 않기 


코딩테스트의 난이도는 발목을 잡히지 않는 수준이다.  최소한의 이해가 있는 사람을 찾는 시험이다.  절대 발목을 잡는 시험이 아니다. 불합격이 지속되는 사람이 있을 것이다.

복기하기  : 떨어진 시험을 복기해야 한다. 스터디에 공유하기
약한 유형 찾기 : 약한 유형을 찾고 도움을 청해야 한다. 

외면하는게 정말 안 좋은 습관이다.  목표로 하는 기업의 기출을 살펴볼 수 있으면 좋다. 


엣지케이스는 최악의 상황을 넣어보는 것이 좋다.

 

극빈값이나 3 7 5 11  같은소수로 계산해보는 것이 좋다. 이 부분은 어느정도 직관이 필요하다.

공간복잡도는 고려하지 않아도 된다. 

 

공간복잡도는 요즘 예외가 되었다. 이제는 자원이 무한이 되었다.  시간복잡도는 중요한 것같다. 1억번 계산하면 1초정도 된다. 계산의 과정이 5억회 이하로 떨어질 수 있도록 하는 것이 좋다.  입출력 조건을 잘 확인해야 한다. 

회사별 코딩테스트 특징


대기업 SI : 기본기를 정말 중요하게 생각한다. 문제난이도는 어렵지 않다. 탐색 이상의 문제를 내지 않는다. 트리문제를 본적이 없다. ( 삼성 제외 ) )

서비스 기업, 테크 기업 : 다양한 알고리즘을 본다. 문제의 요구사항만 본다면 어렵지 않지만 폭넓게 공부해야 한다.

금융권 트레이딩이 필요한 회사, 주식회사의 개발자 : 합격하기 어렵다. 몇몇 개 기업은 본인도 떨어진다. 정말 어렵다.


일반 금융권 개발자 : 기초 기능을 보고 SQL을 많이 본다. 대신 요구사항이 길다. 요구사항을 잘 해결할 수 있는지를 본다. 난이도는 낮은데 귀찮은 문제가 많다. 게임은 구현하고 시뮬레이션 문제가 많이 나온다. 

라이브 코딩을 보는 기업 : 요구사항보다는 본인이 만든 코드를 잘 설명할 수 있어야 한다. 언어에 대한 이해가 깊어야 한다. 내가 이 코드를 왜 짰는지 설명이 가능해야 한다. 




반응형