본문 바로가기

Previous (20-22)/IT

요즘 코딩테스트가 대세인 이유, 그리고 접근법

요즘은 대기업에서 프로그래머를 채용할 때 코딩 테스트를 보는 기업이 많아졌죠.

사실 그 코딩테스트도 알고보면 알고리즘 기반의 문제 해결능력을 보는겁니다.

 

왜 알고리즘 코딩테스트를 할까요.

문제 해결능력을 보기 위해서일까요.

 

원론적으로 보면 그게 맞긴 합니다.

하지만 진짜 이유는 시대가 변했기 때문입니다.

 

예전만 해도 프로그래밍을 하려면 그냥 언어 배우고 코드만 짜면 장땡이였습니다.

사실 수학 몰라도 옛날에는 프로그래밍 하는데 전혀 문제 없었습니다.

input -> process -> output 이것만 내면 됩니다.

 

대표적인 예를 들까요.

IT가 대세였던 때가 언제였죠? 요즘 말고요.

바로 2000년대 초반입니다.

 

그 때 인터넷이라는 것이 들어서면서 가장 많이 했던게 뭐였죠.

웹 프로그래밍이였습니다.

 

홈페이지 만드는데 수학이 필요할까요?

크게 필요 없습니다.

레이아웃 짜고 거기 맞춰서 문구 넣고 조절만 잘하면 됐습니다.

 

그렇다면 SI업계의 대형 시스템의 경우는 어떨까요.

말 그대로 범위만 확장되었지, 똑같습니다.

ERP를 만든다고 칩시다. 인사 시스템이 있고 다른 시스템도 있습니다.

그 시스템 만들려면 뭐 해야되죠? 현업 담당자의 요구가 있습니다.

그 요구사항에 맞게 만들면 됩니다.

거기에 수학이 들어갈까요? 재무제표같은 데에서 들어갈 지도 모르겠네요.

하지만 산수만 할줄알면 됩니다. 문제 없습니다.

 

그런데 요즘은 시대가 바뀌었죠.

뭐가 대세죠? 클라우드. 빅데이터. 인공지능. 블록체인 등등.

 

IT가 고도화되었습니다. 이제는 단순 산수의 지식만으로는 안됩니다.

PC와 HW 성능이 높아지면서 이제는 고급 지식을 필요로 합니다.

그래서 수학이 필요해지고 알고리즘 해결능력이 필요해지는겁니다.

 

IT 업체를 제외한 일반 기업체에서 IT를 도입하는 기업에서 근무하는 사람들은 그런거 모릅니다.

현업 요구에 맞춰서 만들줄만 알지, 뭔가 고도화된 기술을 따라갈 생각을 안합니다. 아니 못합니다.

그것만 해도 바쁘니까.

 

하지만 시대가 자동화를 요구하고 높은 처리능력을 요구하다 보니, 기계가 알아서 다 하는데

그냥 알아서 하는게 아니라 뭔가 요구되는 표현을 입력시켜줘야 기계가 거기에 맞춰서 합니다.

사람이 아무것도 안하는 완전자동화의 시대가 아직 온 것은 아니니까요.

 

그래서 코딩테스트를 보고 알고리즘 이해능력을 필요로 하는겁니다.

 

하지만 저 또한 예외는 아니였죠.

일반 기업체에서 IT 근무를 하다 보니 수학적 능력을 쓸 곳이 있겠습니까. 없죠.

그러나 시대가 변해가고 어떠한 고도화된 업무를 수행해야 할 일이 생긴다던가.

혹은 좀 더 고도화된 기술을 요하는 곳으로 이직을 준비한다던가.

뭐가 됐든 간에 변해가는 IT 트렌드를 따라가기 위해서는 적어도 프로그래머를 꿈꾸거나 일한다면

이제는 달라져야겠죠.

알고리즘도 알아야 하는 시대입니다.

 

또 한가지.

요구사항 맞춰서 시스템 만드는거는 이제 전공자가 아니더라도 다 할 수 있습니다.

왜냐. Tool이 좋아졌으니까. 

그렇다면 전산 전공자가 다른 개발자와 차별성을 두고 앞서나가려면

결국은 코딩능력을 끌어올리는 알고리즘 기반 문제해결능력이 정답이 됩니다.

거기서 인공지능이 나오고 빅데이터가 나오고 블록체인이 나옵니다.

 

그런데, 고민이죠.

아 나 10년동안 아무것도 안했는데. 지금와서 하려니 막막하다.

대학생들 중고등학생들은 막 몇달에 걸쳐서 빡세게 공부하는데 못따라가겠다.

저거 코드 언제 다 짜냐. 심지어 외우는건 택도 없다.

 

출처: 백준

코딩테스트로 가장 유명한 모 사이트입니다.(주소는 사진에 다 적혀 있습니다)

저런걸 풀어야 합니다.

문제가 한두개도 아니고 몇천개 몇만개 됩니다.

 

그래서 어느 세월에 다 푸냐고요?

당연히 못풀죠. 왜 못푸냐. 시간이 없어서.

 

내가 진짜 슈퍼 초 천재라서 막 5분 10분만에 다 푼다고 칩시다.

근데 그걸 1만문제를 다 푼다? 시간 안남습니다.

능력이 없어서가 아니라 시간이 없어서 못푸는 겁니다.

 

그래서 흔히들 하는 말이 유형을 알아야 한다는 말도 있고,

예상문제를 찝어서 하는데도 있고 뭐 그런 식인데.

제일 중요한 것은 프로세스를 이해해야 하는 것이 아닌가 싶습니다.

 

인터넷 가면 정답 다 있어요.

그래서 정답을 빠르게 찾을 수도 있습니다.

 

그런데도 불구하고 코딩테스트는 여전히 유효합니다.

왜일까요?

 

어떤 주어진 문제를 해결하려면 어떤 방식으로 접근해야 하는가.

그런 것을 파악하는 것도 능력입니다.

 

1번 정점부터 4번 정점까지 모두 거쳐가는 방법을 구하라는 문제가 나왔다고 칩시다.

그거 머리 꽁꽁 싸메면서 고민하실건가요.

그러는 사이에 시간 다 지나가는데.

그렇다고 인터넷 검색창에 "1번 정점부터 4번 정점까지 ..." 이렇게 검색하시겠습니까.

문제 유형이 복잡하면 얄짤없죠.

 

하지만 주어진 문제를 보고 어떤 식으로 해결해야겠다 라는 것이 딱 떠오른다면

거기에 맞는 알고리즘을 찾고 풀면 되는겁니다.

그런 식으로 접근해야 하지 않을까 싶습니다.

 

그래서 위 문제는 어떻게 접근할거냐고요.

BFS나 DFS로 접근하면 됩니다.

 

이런 식으로 접근하는 방법을 알아야 한다는 것이고요.

중요한 것은 무엇을 어떻게 찾아야되나 조금만 고민해보면 된다는겁니다.

BFS 찾아보고 글 조금만 읽어보면 이해하는데 몇 분 걸리죠? 5분 정도 걸립니다.

그러면 그거 소스코드로 스스로 안 보고 짜는 데 몇 분 걸리죠? 10분~30분 걸린다 칩시다.

거기서 시간 Save의 차이가 나오는겁니다.

 

개념만 이해하고 넘어가는 시간과

소스코드로 직접 일일히 짜는데 걸리는 시간하고도 거의 몇 배나 차이나기 때문에

시간이 많이 없는 분들은 개념이라도 확실하게 이해하는 것이 중요합니다.

 

물론 소스코드로 짜 보는 것도 좋습니다.

하지만 진짜 꼭 알아야 되겠다 싶은 것 정도만 짜야지, 모든 코드를 다 짜지는 마시고요.

 

채용 담당자가 코딩 테스트를 통해서 얻고자 하는 것은

저 지원자가 문제 해결을 하는 능력을 보고자 하는 것이지,

순수하게 소스코드를 막 엄청 화려하게 잘 짜는 것을 보고자 하는 것이 아닙니다.

 

내용이 조금 많이 길었네요. 하지만 대충은 이해하셨을 것입니다.

 

그러면 이제 코딩테스트를 공부하려면 어떻게 해야 하느냐.

 

1. 언어를 일단 하나 정합니다. 자기가 잘 하는 언어면 좋겠죠. 

저라면 Python 추천합니다. 수학에 가장 특화된 프로그래밍 언어이기 때문입니다.

 

2. 알고리즘 짜는데 기본적인 함수나 코드, 명령어. 이 정도는 숙지해야 합니다.

Queue, Stack, for문, List문, Hash, Heap 등등.

 

3. 그런 다음에 백준이나 프로그래머스 등등 사이트 참고하면서 나와있는 시중 문제를 보고 문제에 대한 해결방법을 파악해 줍니다. 코드가 있으면 참조로 보셔도 좋고 짜도 좋지만 거기에 너무 과도한 시간을 보내는 것은 시간 절약에 전혀 도움이 되지 않습니다.

 

 

이 정도가 되겠네요.

 

그리고 시중에 있는 코딩테스트 책같은 것도 나름 추천합니다.

책에서는 코드까지 같이 나와있긴 한데, 주로 위에서 제가 설명한 순서 정도로 소개된 책들도 여러 종류 있어서 해당 책을 보면 좀 더 개념 파악에 도움이 될 것으로 생각됩니다.

 

시중에 있는 책 중에서 가장 괜찮겠다 싶은 책으로 아래 책을 사 봤습니다.

저도 아직 안봤습니다. 제목, 목차, 내용 구성이 제가 생각했던 것과 그나마 가장 근접하다고 판단했을 뿐.

그러므로 책 광고까지는 아닙니다만 기대해봐야겠네요.

 

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&barcode=9791189909178

 

파이썬 알고리즘 인터뷰 - 교보문고

세계 최고 온라인 문제 풀이 사이트인 리트코드(LeetCode)의 기출문제 풀이와 분석! 200여 개가 넘는 일러스트를 통해 알고리즘과 자료구조 이론을 한눈에 쉽게 익힐 수 있음은 물론, 파이썬으로 구

www.kyobobook.co.kr