알고리즘을 잘하면 프로그래밍도 잘할까?
이름있는 스타트업, 대기업에서는 모두 코딩 테스트를 본다. 기업들에서도 알고리즘을 필수적으로 테스트 하니, 알고리즘을 잘하면 프로그래밍을 잘하는것은 아닐까? 알고리즘 잘하면 대기업에서 데려간다라는 말이 종종 보인다. 이런 글들을 보면 그들이 알고리즘을 공부하는 이유가 무엇인건가 종종 생각하게 된다
알고리즘 문제를 푼다는 것은 마치 중고등학생때 수학문제를 푸는것과 마찬가지이다
중고등학생때 수학문제를 풀었던 경험이 다들 있을 것이다. 쎈문제집을 보면 개념을 익히고, 연습문제를 풀어 이런 상황에서 이런 개념을 사용해야되는구나를 숙지하게 된다. 알고리즘도 다를게 없다. 알고리즘을 숙지하고 해당 알고리즘의 문제를 풀어 출제자 의도를 파악하는 법을 깨닫는다. 결국 "알고리즘을 잘한다" 라는 것은 "알고리즘 문제를 푼 경험이 풍부하다"라는 것이다. 알고리즘을 잘한다는 것은 프로그래밍을 잘한다는 것과 동치가 될 수 없다는 것을 우리는 여기서 알 수 있다. 그저 다른 사람들보다 경험과 논리력이 얼마나 뛰어난지를 알 수 있는 품목일 뿐인 것이다.
수학을 예시로 들어보자
Q. DEFH 도형의 넓이가 ABC 도형의 몇배인가?(DEHF는 평행사변형이다, G는 무게중심이다, DF와 BC는 수평이다)
위 문제는 중학생 과정의 문제이다. 이 문제를 보고 우리는 무슨 개념을 써야하는지 바로 떠올릴수 있다.
DEFH는 평행사변형이라는것에서 마주보는 변이 평행이며 길이가 같다는 개념,
G가 무게중심인것으로 AD:DB = 2:1 이라는 개념 -> 평행 + 비율이라는 개념을 통해 닮음을 사용해야 된다는것
밑변이 같고 높이가 같으면 삼각형의 너비는 같기 때문에 DFE와 DEB의 너비는 같고, 즉 DEFH의 너비는 BHF와 같다
무게중심에서의 2:1이라는 개념을 활용해 ABC:ABF = 3:2, ABF:HBF = 3:2
즉 ABC:HBF = 9:4 이므로 DEFH의 넓이는 ABC의 4/9라는것을 도출해낼수 있다.
프로그래밍을 예시로 들어보자
시작점에서 도착점까지 현재 위치의 숫자보다 더 작은 숫자로으로 내리막 이동 -> dfs, bfs 개념(보통 최소라는 단어가 붙으면 bfs사용하는게 유리)
N과 M의 범위가 500x500 -> 250000, 백준에서 일반 탐색문제에서는 150x150넘어가면 시간초과가 날 가능성이 있음(인풋의 범위로 사용해야 되는 알고리즘 유추하기)
따라서 dfs + 메모이제이션 개념으로 dp사용하는게 적절하다고 판단 할 수 있음
수학 문제와 알고리즘 문제 모두 경험을 토대로, 어떤 키워드가 왔을때 어떠한 개념이 쓰여져야 하는구나를 판단하고 문제를 접근하여 푸는것을 알 수 있다. 나는 알고리즘을 잘하면 좋다는 것은, 우리가 중고등학생 때 수학, 영어 잘하면 좋다라고 하는것과 별반 차이가 없다고 생각한다. 수학 영어를 잘한다고 해서 모든 과목을 잘하는 것은 아니지만, 하루에 공부에 쏟는 시간이 일반적으로 타 학생보다 많다. 마찬가지로 알고리즘을 잘한다고 해서 프레임워크나 라이브러리를 통해 만든 결과물이 뛰어나지는것은 아니지만, 하루에 프로그래밍에 투자하는 시간이 일반적으로 타 학생보다 많다는 것이다. 이것은 지금 당장 스프링을 모른다 하더라도, 스프링으로 프로젝트를 하기 위해 남들보다 짧은 기간에 기술을 습득할 수 있다는 애기다. 물론 알고리즘을 하지 않고, 프레임워크와 라이브러리로 무언가를 만들어내는 것을 잘하는 사람도 많다. 하지만 기업이 면접이라는 수단만으로 짧은 시간 동안 많은 사람들 중 그 사람이 그런사람인 것을 판단하는것은 쉽지 않다. 그래서 코딩테스트라는 최소한 이정도의 논리력은 있어야 된다는 진입장벽을 두게 되는 것이다.
알고리즘 공부만 잘하면 대기업 갈 수 있나요? 삼성 C형따면 삼성에서 데려가지 않나요? 이런 애기를 종종 듣곤 한다. 알고리즘을 잘하면 물론 좋다. 하지만 알고리즘을 잘해 대기업에 취업한 사람들이 알고리즘"만" 잘해서 대기업에 취업한게 아니라는것을 알아줬으면 좋겠다.
대부분 알고리즘을 공부하게 되는 계기가 기업코테 일것이다. 한국에서의 알고리즘 테스트 도입은 기업입장에서 수많은 허수 지원자를 걸러낼 수 있는 비용절감의 절차로 쓰이고 있다는게 필자의 생각이다. 알고리즘은 백준 골드2-4, 프로그래머스 level3 수준의 문제를 문제없이 풀 수 있을만큼만 공부하고 프로젝트를 통해 다양한 기술과 배포경험을 쌓아 포토폴리오를 만드는것이 더 중요하다고 강조하고 싶다. 그렇다고 해서 코딩 테스트 안보는 기업도 많던데 코테 준비안하고 그런 곳 취업 하면 되는것 아닌가? 생각하는 사람도 있을 것이다. 나는 별로 좋은 생각이 아니라 생각한다. 당신의 기업의 문을 두드릴때 그 문이 열리는 난이도에 따라 당신 주변에 일하는 사람의 수준이 바뀔 것이다.