코딩 테스트를 준비하기 전에
합격자가 되고싶은 여러분
코딩 사이트들은 각각의 장점을 가지고 있습니다. 프로그래머스는 다음과 같은 기능을 가지고 있어 추천합니다.
타인의 풀이를 볼 수 있다.
테스트 케이스를 추가할 수 있다.
각각의 기능들은 다음과 같은 효력을 발휘합니다.
타인의 풀이를 볼 수 있다.
다른 사람이 작성한 코드를 보면 자연스럽게 다양한 문제 풀이 접근 방식이나 코딩 스킬을 습득할 수 있습니다.
어떤 알고리즘을 사용했는지, 예외를 어떻게 처리했는지 등 학습 하기에 유용합니다.
나만의 테스트 케이스를 추가할 수 있습니다.
보통 코딩 테스트에서는 문제를 파악할 수 있는 수준에서 입출력의 예 또는 테스트 케이스를 줍니다.
numbers | result |
---|---|
[2, 1, 3, 4, 1] | [2, 3, 4, 5, 6, 7] |
[5, 0, 2, 7] | [2, 5, 7, 9. 12] |
그러나 모든 테스트 케이스를 주는 것은 아닙니다. 문제를 설명하는 수준에서의 테스트 케이스를 주기 때문에, 문제 분석 시 고려해야 할 중요 케이스 등을 고려하지 않고 주는 경우가 많습니다.
바로 이럴 때 '나만의 테스트 케이스' 만들기가 있으면 좋습니다. 충분한 시간을 들여 문제를 분석한 다음 여러 예외 상황을 확인할 수 있도록 나만의 테스트 케이스를 추가하고 문제를 푸는 것이 좋습니다.
아는 것과 모르는 것은 명확하게
코딩 테스트를 공부하기 전에 '내가 아는 것과 모르는 것을 명확하게 구분하는 것'은 중요합니다. 알고리즘 공부가 어려운 이유는 공부하는 과정에서 아는 것과 모르는 것의 경계가 모호하기 때문입니다.
다음은 이를 판단하기 위한 효과적인 방법들을 소개합니다.
첫 번째, 기록하라
모든 문제를 완벽하게 풀이할 수는 없습니다. 하지만 중간까지는 가볼 수 있습니다. 우리는 중간까지 갔을 때 두 가지 행동을 선택할 수 있습니다.
못 푼다고 생각하고 그자리에서 그만 둔다.
어디까지 생각했는지 기록을 해둔다.
만약 1을 선택하게 될 경우 실력은 쉽게 오르지 않습니다. 2를 선택했을 경우 어떤 알고리즘을 적용하려고 했는지, 근거는 무엇인지, 문제를 푸는 과정에서 떠올린 알고리즘을 어떻게 코드에 녹여내려고 했는지 기록할 수 있습니다.
이후 나중에 답안을 보면서 나의 기록과 비교하며 더 효율적으로 공부를 할 수 있습니다. 다르다면 어디가 다른지 복기할 수도 있습니다.
두 번째, 시험 보듯이 공부하라
주기적으로 자체 시험을 보면 좋은 결과를 얻을 수 있습니다. 많은 사람들은 시간을 간과하는 경우가 많습니다. 하지만 시험은 주어진 시간을 효율적으로 사용하여 최대의 점수를 내는 것을 말합니다. 이와 같은 상황을 미리 준비한 사람과 준비하지 않은 사람의 결과는 많이 다를 것입니다.
세 번째, 짧은 시간 공부해서는 절대 코딩 테스트를 통과할 수 없다.
코딩 테스트는 짧은 시간 안에 준비할 수 없습니다. 인터넷 광고를 본다면 다음과 같은 문구를 많이 보았을 겁니다.
6시간 만에 끝내기
하루 만에 끝내기
일주일 만에 끝내기
하지만 이런 방법은 없습니다. 최소 한 달에서 두 달 정도를 매우 집중해서 공부해야 한다고 생각합니다.
네 번재, 나만의 언어로 요약하라
인간의 뇌는 굉장히 긍정적입니다. 때문에 남이 작성한 글을 보고 '내가 이해했다'라고 착각하기 쉽습니다. 이해했는지 확인하는 방법은 이해한 내용을 요약해보는 것입니다. 요약을 잘한다면 나중에 문제를 풀 때도 이해한 내용이 쉽게 떠오를 것입니다.
자료구조와 알고리즘
자료구조와 알고리즘이란?
코딩 테스트는 레벨이 올라갈수록 난이도가 어려워지고 복잡한 유형의 문제들이 있습니다.
분기와 반복을 사용하는 단순 절차 문제
자료를 어떠한 구조에 담아둬야 효율적인 문제
빠른 성능을 위해 이미 연구된 알고리즘을 사용하는 문제
특정 사고방식으로 접근해야 하는 문제
첫 번째 유형을 제외한 나머지는 입력 데이터에 대한 분석, 자료구조와 알고리즘에 대한 지식이 필요합니다.
우리는 이것을 여행하는 것으로 비유할 수 있습니다.
우리는 입력받은 데이터를 필요한 자원으로 바꾸는 환전과 같이 가공하는 과정이 필요합니다. 이 과정을 자료구조라고 합니다. 그리고 이렇게 바꾼 돈을 가지고 어떻게 하면 가장 저렴하게 사용할 수 있을지 고민하는 것을 알고리즘이라고 볼 수 있습니다.
만약 우리가 미국에 갔는데 달러가 아닌 엔화로 바꿨다면 손해를 보게됩니다. 또한 현금 결제를 할 경우 싸게 준다고 하지만, 어쩔수 없이 카드로 결제를 해야하는 경우 우리는 자원을 낭비하게 되는 것입니다.
자료구조와 알고리즘은 세상을 전산화 합니다.
현실 세계에서 일어나는 많은 현상들을 자료구조로 표현할 수 있습니다. 은행에서 줄을 서서 기다리는 것을 큐(Queue)로 표현할 수 있고, 편의점에서 선입선출을 하는 것을 스택(Stack)으로 표현할 수 있습니다.
이처럼 자료구조와 알고리즘을 공부한다는 것은 현실을 컴퓨터 관점에서 이해하는 것을 공부한다고도 볼 수 있습니다.
코딩 테스트는 업무에 도움이 되는가?
어떤 사람들은 '코딩 테스트는 업무에 도움이 되지 않는다'라고 말을 합니다. 이 말은 관점에 따라 다를 수 있습니다. 과거에는 직접 개발을 해야했지만 지금은 라이브러리나 프레임워크와 같이 개발자에게 도움을 주는 도구들이 많이 나와 있습니다.
하지만 복잡한 일은 그렇게 해결할 수 없습니다. 이때부터 개발자는 스스로 상황에 맞는 코드를 작성해야 합니다. 개발자의 중요한 덕목 중 하나는 '요구 사항을 구현할 수 있는가?'를 말합니다. 만약 구현력이 부족하다면 이런 상황에서 일을 해내기는 어렵습니다.
코딩 테스트는 어떤 입력을 효율적인 자료로 구성하고 적절한 알고리즘을 통해 결과를 만들어내므로 구현 능력을 키우고 싶다면 코딩테스트가 도움을 줍니다.