코딜리티(Codility) 첫 경험 - 데모 문제 1번

개인적으로 코딩테스트에 대한 공포감(?)이 조금 있다. 사실 코딩테스트에 대해서는 논쟁이 많은 편이다. 개인적으로 코딩테스트는 그냥 최소한의 자격 요건을 보는거지 이 결과로 당락을 결정하는건 아니라고 보는 편이다. 운동하는 사람들끼리 통용되는 말인 노가다에서 쓰는 근육과 헬스에서 쓰는 근육이 다르다이 프로그래밍 세계에서도 그대로 통용된다. 실무에서 쓰는 근육과 코딩테스트에서 쓰는 근육이 다르다 - 즉 코딩테스트 잘본다고 해서 실무를 잘하는게 아니다. 프로그래머라면 물론 코딩도 잘해야 하지만 직급에 맞는 시야와 상호간 커뮤니케이션 능력, 품질에 대한 고려 등등 코딩 외적인 능력이 있어야 훌륭한 개발자가 될 수 있다는게 내 생각이다.

아 근육 얘기 나오니까 하는 얘긴데 코딩테스트 본지 오래된 사람 갑자기 불러다가 코딩테스트 시키면 아무리 천하의 구글러라도 원하는 점수를 못얻을거다. 쓰는 근육이 다르니까.

암튼 말이 길어졌는데 코딩테스트에 대한 공포감을 해결하고자 코딜리티라는걸 이번에 처음 접해보고 한 번 도전해보았다. 코딜리티에는 데모 문제가 있는데 첫 번째 문제인 바이너리 갭(Binary Gap)을 한 번 풀어보았다.

이 문제는 함수를 짜는데 이진수 1과 1 사이에 있는 최대 0의 갯수를 구하는 문제다. 예를 들어 529는 이진수로 1000010001 이며, 함수는 4를 리턴한다. 9는 이진수로 1001이며 함수를 2를 리턴한다. 다만 32는 1000000 이라 갭이 없으므로 0을 리턴하게 된다.

처음에는 뭔가 이진수로 변환한 스트링을 순회하면서 Candidate를 배열에 추가하고 등등등 생각하다가 생각하다가…
갑자기 번뜩이는 split() 함수! 이걸 사용하면 굉장히 쉽게 문제를 해결 -ㅅ-;;;
뭔가 개꼼수 같지만 동작은 잘한다. 테스트케이스 몽땅 통과. 아래 코드는 3분만에 적었다.

알고리즘을 신성시하고 뭔가 대단한걸 기대한 사람들은 날더러 비정통파, 넌 프로그래머도 아냐라고 욕할지도 몰라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function solution(N) {
// write your code in JavaScript (Node.js 8.9.4)
if (N === undefined || N < 0) {
throw new Error('invalid input');
}

// 10진수를 2진수로
const bin = N.toString(2);

// 1을 delimeter로 쪼갠다.
const sp = bin.split('1');
// 이진수 마지막이 0이면 배열의 마지막을 뺀다.
if (bin.endsWith('0')) {
sp.splice(sp.length - 1, 1);
}

const lens = sp.map((v) => {
return v.length;
});

return Math.max(...lens);
}

물론 이건 1번 문제니까 쉽겠지.

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×