https://baactree.tistory.com/52
 

(내블로그 아님)


제일 공감갔던 부분이 ps할 땐 아래 세개 능력이 필요하단 점임.


내가 코멘트 붙이는건 기업코테 기준이고 대회코테는 이런 글 없어도 알아서 잘할거라 생각함


1. 배경 지식


dp, dfs, bfs, 다익스트라, 시간복잡도, 기초 수학과 같이 코테에 활용되는 기본적인 이론지식임.


예를 들어 니가 다익스트라 문제를 난생 처음 접했다면, 니가 다익스트라급 천재가 아닌이상 절대 못풀거임. 왜? 시간초과나는건 아는데 해결할 방법을 전혀 알지 못하니까.


이 부분은 사실 어느정도 유형이 정해져있어서, 하나씩 골라잡고 태그별로 풀어가면 해결된다.


(다만 그리디는 좀 예왼데 이건 배경지식 보단 순간적인 문제 해결 능력이 더 중요함. 웰노운 그리디라면 모를까)


2. 문제 해결 능력


좀 복합적인 능력인데 쉽게 생각하면 문제 지문을 읽고 어떻게 짜야 답이 나올까?를 도출해내는 능력이다.


이 과정에서 위 배경 지식을 사용하는데, 아 이런 알고리즘을 적용시키면 되겠구나, 아 이러면 시간초과가 나겠구나를 미리 생각하는거지


이건 배경 지식이 충분한 상태에서 문제 박치기로 키우는 방법밖에 없다. 


구체적인 방법으론 일단 1번 배경지식을 키우기 위해 특정 알고리즘을 블로그나 책으로 공부하고 관련된 태그로 문제를 쭉 풀어봄.


이렇게 알고있는 지식들이 하나씩 늘어나서 충분하다고 느껴지면 그때부턴 문제 태그를 가리고 랜덤으로 푸는거임.


근데 랜덤으로 풀다보면 내가 전혀 모르는 알고리즘도 나올 수 있음. (뭐 갑자기 기하학이라든가)


여기서 추천하는 팁이 있는데 토탐정이라는 크롬 확장임. 내가 아는 알고리즘 유형을 지정해놓고, 그 안에서 랜덤으로 문제를 뽑을 수 있음.


내가 전혀 모르거나 필요없는 유형은 생각에서 배제할 수 있는거지


(물론 실전 코테에선 내가 모르는 유형이 나올 수도 있으므로 생랜덤으로 돌려보거나 기출을 쭉 풀어보는 연습도 필요하다)


흔히 컴퓨팅적 사고라는 개념이 들어가는 영역인데 내게 주어진 능력들로 문제를 어떻게 풀어낼 것인가?를 의미함


3. 구현 능력

2번이 머리속에서 일어난 과정이라면 거기서 도출된 결과를 코드로 옮겨적는 능력임


내가 생각한 풀이가 있는데 구현을 못하겠다면 이 능력이 없는 것


대개 코딩은 안하고 학교 공부만 했으면 이런 상태일 확률이 높음. 아는건 많은데 이를 코드로 짜질 못하는거지


키우는 방법은 크게 두갠데

1. 빡구현 문제를 많이 풀어본다. -> 주로 삼성, 카카오 코테가 이런 유형이 많은데 한두개씩 풀어보면 구현능력이 대폭 상승한다

2. 그림을 많이 그려본다. 갑자기 웬 그림? 할 수 있는데 알고리즘 코드는 웬만하면 절차지향느낌이라 그림을 그려보면 많은 도움이 된다. 플로우 같은걸 그냥 대충 끄적이고 그걸 코드로 옮기는 연습 해보셈



이게 사람마다 전공자, 비전공자, 학점 등등의 이유로 조언을 세심하게 받기엔 어려움


위 3개 능력 중 나한텐 어느게 부족할까?를 생각해보면 공부할 갈피를 잡을수있을거