✈️다음 글은 코딩 테스트 스터디를 준비하기 위해 책을 정리한 글입니다.

코딩 테스트란?
코딩 테스트는 지원자가 알고 있는 자료구조와 알고리즘 등을 이용해서 문제를 해결할 수 있는 능력을 평가하는 시험입니다. 한국의 중상위 IT 기업은 거의 모두 코딩 테스트를 진행하며, 이 테스트를 통과한 지원자만 다음 면접 과정을 진행할 수 있습니다.
일반적인 채용 프로세스

코딩 테스트에서는 제한 시간 내 기업에서 출제한 문제를 해결하는 코드를 작성해야 합니다.
출제되는 문제 개수와 난이도는 기업별로 상이하며, 일반적으로는 4~5문제를 3시간 정도 내 해결해야 하며, 난이도는 프로그래머스 기준으로 2~4 레벨 정도입니다.
제한 시간 내 푼 문제 개수와 시간을 바탕으로 기업은 다음 단계로 넘어갈 지원자를 선택합니다. 따라서 평소 코딩 테스트 문제를 정확하고 빠르게 푸는 연습을 많이 해야 하고, 코딩 테스트에서는 가능한 한 많은 문제를 풀도록 노력해야 합니다.
코딩 테스트를 보는 이유
개발자 실력은 기능을 구현하기보다 어떻게 효율적으로 설계할 수 있는지로 판가름이 납니다. 요구 조건에서 제시한 기능을 그대로 구현하는 것은 개발자의 필수 요건입니다. 물론 구현을 빠르게 할 수 있다면 좋지만, 코드가 번잡하고 비효율적이라면 절대 실력 있는 개발자가 아닙니다. 서비스가 점차 커지고 추가해야 하는 기능들이 늘어날수록 기존 코드가 발목을 붙잡는 일이 많아지게 될 것입니다. 그래서 능력 있는 개발자로 인정받기 위해서는 단순히 코드를 쓰는 것 이상을 해야 합니다. 개발자 능력은 기능을 빠르고 많이 만드는 것이 아니라 정확하고 효율적으로 만드는 것입니다. 코딩 테스트를 통과하려면 코드 효율성을 고려하면서 코드를 작성해야 합니다. 따라서 코딩 테스트를 준비하는 과정에서 개발자에게 필요한 최소한의 역량을 갖추어지기에 코딩 테스트를 충분히 준비한 개발자를 선호하게 되는 것입니다.
문제 해결 과정을 보는 것
코딩 테스트에서는 주어진 문제를 이미 알고 있는 알고리즘과 자료 구조를 응용해서 해결해야 합니다. 이 과정에서 개발자에게 필요한 문제 해결 과정을 엿볼 수 있습니다. 먼저, 개발자는 주어진 문제를 정확하게 파악해야 합니다. 필요한 기능이 주어졌는데 이를 잘못 이해하고 개발을 진행한다면 아무것도 해결하지 못하고 시간만 날리는 셈입니다. 코딩 테스트에서는 시간제한이 있기 때문에 정확하게 파악하지 못한다면 시간 내에 문제를 충분히 풀 수 없습니다. 따라서 끊임없이 문제에서 요구하는 방향으로 문제를 해결하고 있는지 생각해야 하며, 이는 개발자의 문제 파악 능력을 확인하는 데 많은 도움이 됩니다.
똑같은 결과를 빠르고, 효율적으로
아무리 문제에서 요구하는 정답을 구할 수 있는 코드라고 하더라도 정답을 구하는 과정이 효율적이지 못하면 좋은 코드라고 할 수 없습니다. 효율적으로 코드를 작성하지 못한다면 제한된 실행 시간 때문에 시간 초과로 판정되어 문제를 해결하지 못한 것으로 간주됩니다. 이처럼 효율적으로 코드를 작성하는 것은 실제 개발할 때는 물론, 코딩 테스트에서도 굉장히 중요합니다.
코딩과 디버깅
코딩 테스트도 결국 코드를 작성하는 것입니다. 따라서 코드를 작성하는 능력이 좋을수록 유리합니다. 코드를 작성하는 능력이 좋을수록 문제 풀이를 더욱 빨리 구현할 수 있고 실수도 줄어들기 때문입니다.
잘 짠 코드란?
실수 없이 문제를 빠르게 풀려면 코드를 잘 작성하는 것도 중요합니다. 코드는 물론 가장 먼저 문제를 해결할 수 있어야 합니다. 그렇지 않으면 잘 짠 코드, 잘 못 짠 코드를 구분하기 이전에 이미 틀린 코드입니다. 잘 짠 코드를 논할 때 개인적으로 가장 중요한 것은 가독성과 효율성입니다. 읽기 쉬운 코드는 로직에만 집중할 수 있으므로 이해하기 쉽고, 실수가 있어도 쉽게 잡아낼 수 있기 때문입니다. 코드를 가독성 있게 작성하면 이후 면접 과정에서 코딩 테스트 관련 질의응답에서도 좋은 인상을 심어 줄 수 있습니다. 또 아무리 읽기 쉬운 코드라고 하더라도 효율성이 떨어진다면 코드를 사용하는 데 어려움이 있을 수 있습니다.
가독성을 높이고 싶다면 코드 역할에 집중하여 작성해야 합니다. 하나의 코드가 너무 많은 역할을 하게 되면 코드가 복잡해지고 가독성이 떨어집니다. 따라서 코드가 길어지거나 중복되는 부분이 발생한다면 변수와 메서드, 클래스를 적극적으로 활용하여 읽기 쉬운 코드를 작성할 수 있도록 하고, 역할에 맞게 이름을 붙여 로직을 수행할 수 있게 해야 합니다.
예를 들어 다음 코드가 있습니다.
private int function(int a, int b) {
return a - b;
}
이 메서드를 보면 어떤 역할을 하는지 파악하기 쉽지 않습니다. 문제에서 오답이 나와 코드를 보면 단순하게 두 정수의 뺄셈을 구하는 연산이라고 생각할 수 있습니다.
다음과 같이 메서드와 변수에 역할에 맞는 이름을 붙인 코드를 볼 수 있습니다.
private int age(int currentYear, int birthYear) {
return currentYear - birthYear;
}
이처럼 역할에 맞는 변수 이름과 메서드 이름을 붙여 주면 각각 어떤 변수와 메서드인지 쉽게 확인할 수 있습니다.
또 자연수 n이 주어졌을 때 1부터 n까지 합을 구하는 코드가 있습니다.
private static int sum(int n) {
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
이는 반복문을 이용해서 1부터 n까지 순회하며 합을 구하는 매우 직관적인 코드입니다. 하지만 n이 자연수라는 조건을 이용하면 1부터 n까지 합은 다음과 같이 매우 빠르게 구할 수 있습니다.
private static int sum(int n) {
return n * (n - 1) / 2;
}
반복문을 이용한 코드는 n번의 순회가 필요한 반면, 수식을 이용한 코드는 몇 번의 단순한 사칙연산으로 정답을 구할 수 있습니다. 이처럼 코드를 작성할 때는 효율성을 고려하여 작성해야 잘 짠 코드가 탄생합니다.
코드를 짤 때 흔히 하는 실수들
코딩 테스트 문제들은 여러 요구 조건이 있습니다. 이를 코드로 작성하다 보면 하나의 요구 조건을 처리하는 중에 다른 요구 조건을 신경 쓰게 되면서 원래 구현하려고 했던 내용은 잊게 되거나 중간에 구현이 달라 처음부터 다시 구현해야 하는 경우가 빈번히 발생합니다.
이건 비단, 코딩 테스트뿐 아니라 프로젝트를 할 때도 막히는 경우가 있을 것입니다. 이때 흔히 "엎고 다시 하라"라고 이야기합니다. 실제로 모든 코드를 지우고 처음부터 다시 구현하면 정상적으로 동작할 때가 매우 많습니다.
이후에 프로젝트를 엎고 다시 시작하면 이미 어떤 기능들에 대한 데이터와 로직이 필요한지 경험했기 때문에 상대적으로 실수가 적고 더욱 잘 설계된 코드를 작성할 수 있습니다. 코드를 작성할 때 가독성과 역할에 신경 쓰면 문제를 단계별로 나누어 해결할 수 있습니다. 이처럼 코드를 나누어 부분별로 작성하면 이런 실수를 크게 줄일 수 있습니다.
디버깅과 시행착오 줄이기
문제를 제출한 후 정답이 뜨지 않으면 어디에서 오답이 나왔는지 디버깅해야 합니다. 이때도 가독성 있게 작성하는 것이 매우 큰 도움이 됩니다. 가독성 있게 작성된 코드는 문제를 단계별로 해결합니다. 이때 각 단계를 검증하는 것으로 디버깅 시간을 줄일 수 있습니다.
이렇게 단계별로 검증하는 과정은 전체 코드를 작성하기 전에도 가능합니다. 하나의 단계를 완성하고 예시 입출력으로 검증하며, 다음 단계를 완성하고 검증하는 방식을 사용합니다. 이 문제를 해결하기 전에 각 단계가 모두 검증되어 오답을 겪는 시행착오를 줄일 수 있습니다.
따라서 디버깅하여 시행착오를 줄이려면 다음 항목들만 신경 쓰면 됩니다.
- 코드를 단계별로 작성하기
- 하나의 단계를 작성한 후 로그를 찍어 보며 검증하기
- 단계 검증이 실패하면 검증이 실패한 단계 내에서 더욱 자세히 로그 찍어 보기
Ref.
https://m.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS9958230612
[백엔드 개발 채용 프로세스] 서류 전형과 주요 IT 기업 인력 채용 현황
제목은 백엔드 개발 채용 프로세스라고 적어두었지만, 사실 다른 분야 개발자의 채용 프로세스도 대부분 비슷하게 진행됩니다. 단지 그 직무 내용이 분야별로 조금씩 차이가 있습니다. 각 단계
m.hanbit.co.kr
'🔥 알고리즘 > 알고리즘 기초' 카테고리의 다른 글
Big O Notation (0) | 2024.07.27 |
---|
✈️다음 글은 코딩 테스트 스터디를 준비하기 위해 책을 정리한 글입니다.

코딩 테스트란?
코딩 테스트는 지원자가 알고 있는 자료구조와 알고리즘 등을 이용해서 문제를 해결할 수 있는 능력을 평가하는 시험입니다. 한국의 중상위 IT 기업은 거의 모두 코딩 테스트를 진행하며, 이 테스트를 통과한 지원자만 다음 면접 과정을 진행할 수 있습니다.
일반적인 채용 프로세스

코딩 테스트에서는 제한 시간 내 기업에서 출제한 문제를 해결하는 코드를 작성해야 합니다.
출제되는 문제 개수와 난이도는 기업별로 상이하며, 일반적으로는 4~5문제를 3시간 정도 내 해결해야 하며, 난이도는 프로그래머스 기준으로 2~4 레벨 정도입니다.
제한 시간 내 푼 문제 개수와 시간을 바탕으로 기업은 다음 단계로 넘어갈 지원자를 선택합니다. 따라서 평소 코딩 테스트 문제를 정확하고 빠르게 푸는 연습을 많이 해야 하고, 코딩 테스트에서는 가능한 한 많은 문제를 풀도록 노력해야 합니다.
코딩 테스트를 보는 이유
개발자 실력은 기능을 구현하기보다 어떻게 효율적으로 설계할 수 있는지로 판가름이 납니다. 요구 조건에서 제시한 기능을 그대로 구현하는 것은 개발자의 필수 요건입니다. 물론 구현을 빠르게 할 수 있다면 좋지만, 코드가 번잡하고 비효율적이라면 절대 실력 있는 개발자가 아닙니다. 서비스가 점차 커지고 추가해야 하는 기능들이 늘어날수록 기존 코드가 발목을 붙잡는 일이 많아지게 될 것입니다. 그래서 능력 있는 개발자로 인정받기 위해서는 단순히 코드를 쓰는 것 이상을 해야 합니다. 개발자 능력은 기능을 빠르고 많이 만드는 것이 아니라 정확하고 효율적으로 만드는 것입니다. 코딩 테스트를 통과하려면 코드 효율성을 고려하면서 코드를 작성해야 합니다. 따라서 코딩 테스트를 준비하는 과정에서 개발자에게 필요한 최소한의 역량을 갖추어지기에 코딩 테스트를 충분히 준비한 개발자를 선호하게 되는 것입니다.
문제 해결 과정을 보는 것
코딩 테스트에서는 주어진 문제를 이미 알고 있는 알고리즘과 자료 구조를 응용해서 해결해야 합니다. 이 과정에서 개발자에게 필요한 문제 해결 과정을 엿볼 수 있습니다. 먼저, 개발자는 주어진 문제를 정확하게 파악해야 합니다. 필요한 기능이 주어졌는데 이를 잘못 이해하고 개발을 진행한다면 아무것도 해결하지 못하고 시간만 날리는 셈입니다. 코딩 테스트에서는 시간제한이 있기 때문에 정확하게 파악하지 못한다면 시간 내에 문제를 충분히 풀 수 없습니다. 따라서 끊임없이 문제에서 요구하는 방향으로 문제를 해결하고 있는지 생각해야 하며, 이는 개발자의 문제 파악 능력을 확인하는 데 많은 도움이 됩니다.
똑같은 결과를 빠르고, 효율적으로
아무리 문제에서 요구하는 정답을 구할 수 있는 코드라고 하더라도 정답을 구하는 과정이 효율적이지 못하면 좋은 코드라고 할 수 없습니다. 효율적으로 코드를 작성하지 못한다면 제한된 실행 시간 때문에 시간 초과로 판정되어 문제를 해결하지 못한 것으로 간주됩니다. 이처럼 효율적으로 코드를 작성하는 것은 실제 개발할 때는 물론, 코딩 테스트에서도 굉장히 중요합니다.
코딩과 디버깅
코딩 테스트도 결국 코드를 작성하는 것입니다. 따라서 코드를 작성하는 능력이 좋을수록 유리합니다. 코드를 작성하는 능력이 좋을수록 문제 풀이를 더욱 빨리 구현할 수 있고 실수도 줄어들기 때문입니다.
잘 짠 코드란?
실수 없이 문제를 빠르게 풀려면 코드를 잘 작성하는 것도 중요합니다. 코드는 물론 가장 먼저 문제를 해결할 수 있어야 합니다. 그렇지 않으면 잘 짠 코드, 잘 못 짠 코드를 구분하기 이전에 이미 틀린 코드입니다. 잘 짠 코드를 논할 때 개인적으로 가장 중요한 것은 가독성과 효율성입니다. 읽기 쉬운 코드는 로직에만 집중할 수 있으므로 이해하기 쉽고, 실수가 있어도 쉽게 잡아낼 수 있기 때문입니다. 코드를 가독성 있게 작성하면 이후 면접 과정에서 코딩 테스트 관련 질의응답에서도 좋은 인상을 심어 줄 수 있습니다. 또 아무리 읽기 쉬운 코드라고 하더라도 효율성이 떨어진다면 코드를 사용하는 데 어려움이 있을 수 있습니다.
가독성을 높이고 싶다면 코드 역할에 집중하여 작성해야 합니다. 하나의 코드가 너무 많은 역할을 하게 되면 코드가 복잡해지고 가독성이 떨어집니다. 따라서 코드가 길어지거나 중복되는 부분이 발생한다면 변수와 메서드, 클래스를 적극적으로 활용하여 읽기 쉬운 코드를 작성할 수 있도록 하고, 역할에 맞게 이름을 붙여 로직을 수행할 수 있게 해야 합니다.
예를 들어 다음 코드가 있습니다.
private int function(int a, int b) {
return a - b;
}
이 메서드를 보면 어떤 역할을 하는지 파악하기 쉽지 않습니다. 문제에서 오답이 나와 코드를 보면 단순하게 두 정수의 뺄셈을 구하는 연산이라고 생각할 수 있습니다.
다음과 같이 메서드와 변수에 역할에 맞는 이름을 붙인 코드를 볼 수 있습니다.
private int age(int currentYear, int birthYear) {
return currentYear - birthYear;
}
이처럼 역할에 맞는 변수 이름과 메서드 이름을 붙여 주면 각각 어떤 변수와 메서드인지 쉽게 확인할 수 있습니다.
또 자연수 n이 주어졌을 때 1부터 n까지 합을 구하는 코드가 있습니다.
private static int sum(int n) {
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
이는 반복문을 이용해서 1부터 n까지 순회하며 합을 구하는 매우 직관적인 코드입니다. 하지만 n이 자연수라는 조건을 이용하면 1부터 n까지 합은 다음과 같이 매우 빠르게 구할 수 있습니다.
private static int sum(int n) {
return n * (n - 1) / 2;
}
반복문을 이용한 코드는 n번의 순회가 필요한 반면, 수식을 이용한 코드는 몇 번의 단순한 사칙연산으로 정답을 구할 수 있습니다. 이처럼 코드를 작성할 때는 효율성을 고려하여 작성해야 잘 짠 코드가 탄생합니다.
코드를 짤 때 흔히 하는 실수들
코딩 테스트 문제들은 여러 요구 조건이 있습니다. 이를 코드로 작성하다 보면 하나의 요구 조건을 처리하는 중에 다른 요구 조건을 신경 쓰게 되면서 원래 구현하려고 했던 내용은 잊게 되거나 중간에 구현이 달라 처음부터 다시 구현해야 하는 경우가 빈번히 발생합니다.
이건 비단, 코딩 테스트뿐 아니라 프로젝트를 할 때도 막히는 경우가 있을 것입니다. 이때 흔히 "엎고 다시 하라"라고 이야기합니다. 실제로 모든 코드를 지우고 처음부터 다시 구현하면 정상적으로 동작할 때가 매우 많습니다.
이후에 프로젝트를 엎고 다시 시작하면 이미 어떤 기능들에 대한 데이터와 로직이 필요한지 경험했기 때문에 상대적으로 실수가 적고 더욱 잘 설계된 코드를 작성할 수 있습니다. 코드를 작성할 때 가독성과 역할에 신경 쓰면 문제를 단계별로 나누어 해결할 수 있습니다. 이처럼 코드를 나누어 부분별로 작성하면 이런 실수를 크게 줄일 수 있습니다.
디버깅과 시행착오 줄이기
문제를 제출한 후 정답이 뜨지 않으면 어디에서 오답이 나왔는지 디버깅해야 합니다. 이때도 가독성 있게 작성하는 것이 매우 큰 도움이 됩니다. 가독성 있게 작성된 코드는 문제를 단계별로 해결합니다. 이때 각 단계를 검증하는 것으로 디버깅 시간을 줄일 수 있습니다.
이렇게 단계별로 검증하는 과정은 전체 코드를 작성하기 전에도 가능합니다. 하나의 단계를 완성하고 예시 입출력으로 검증하며, 다음 단계를 완성하고 검증하는 방식을 사용합니다. 이 문제를 해결하기 전에 각 단계가 모두 검증되어 오답을 겪는 시행착오를 줄일 수 있습니다.
따라서 디버깅하여 시행착오를 줄이려면 다음 항목들만 신경 쓰면 됩니다.
- 코드를 단계별로 작성하기
- 하나의 단계를 작성한 후 로그를 찍어 보며 검증하기
- 단계 검증이 실패하면 검증이 실패한 단계 내에서 더욱 자세히 로그 찍어 보기
Ref.
https://m.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS9958230612
[백엔드 개발 채용 프로세스] 서류 전형과 주요 IT 기업 인력 채용 현황
제목은 백엔드 개발 채용 프로세스라고 적어두었지만, 사실 다른 분야 개발자의 채용 프로세스도 대부분 비슷하게 진행됩니다. 단지 그 직무 내용이 분야별로 조금씩 차이가 있습니다. 각 단계
m.hanbit.co.kr
'🔥 알고리즘 > 알고리즘 기초' 카테고리의 다른 글
Big O Notation (0) | 2024.07.27 |
---|