2019 카카오 신입 공채 1차
in Devlog on Thinking, Algorithm
카카오 코딩 테스트 문제
들어가기 전
- 문제들은 모두 카카오 기술블로그 게시글을 보았습니다.
- 모든 문제들의 풀이는 읽지 않았습니다.
- 문제들의 설명은 게시글을 참고하여주세요.
- 자바스크립트를 이용하였습니다.
- 언급하는 내용들은
Place 0
형식으로 나타냅니다. 주석에 표기되어 있습니다.
#post-content blockquote { display : none; } // 문제풀이 텍스트가 보이지 않습니다.
1. 오픈채팅방
정답률 59.91%
function solution(record) {
const labels = {
Enter : "들어왔습니다.",
Leave : "나갔습니다."
};
const names = record
.filter(x => x.substr(0,5) !== "Leave")
.reduce((names, line) => {
let [command, uid, name] = line.split(" ");
if (command == "Leave" | !name) return names;
names[uid] = name;
return names; // Place 1
}, {});
return record
.filter(x => x.substr(0,6) !== "Change")
.reduce((results, line) => {
let [command, uid] = line.split(" ");
results.push(`${names[uid]}님이 ${labels[command]}`);
return results;
}, []);
}
문제를 읽고 바로 어떻게 풀어야 할지 생각이 났다.
첫 번째 문제답게 다른 문제들보다도 쉬운 문제였기 때문에 큰 고민없이 풀었다.
처음 제출에서 Place 1
에서 return {...names, [uid] : name}
이라 작성하였는데, 시간 초과로 몇몇 테스트케이스에서 실패하였다.
이정도 차이는 괜찮은줄 알았는데, 객체를 뿌려주고 또 만들어주는데에 생각보다 많은 자원이 필요한 것 같다.
2. 실패율
정답률 55.57%
function solution(N, stages) {
let users = stages.length;
let ns = Array(N).fill().map((v, k) => [k, 0]);
stages.forEach((v, k) => {
if (v > N) return false;
ns[v-1][1]++;
});
0
return ns.map(x => {
x.push(x[1]+users == 0 ? 0 : x[1]/users); // Place 1
users = users - x[1];
return x;
})
.sort((a, b) => a[2] == b[2] ? a[0] - b[0] : b[2] - a[2]) // Place 2
.map(x => x[0]+1);
}
첫 번째 문제와 같게 꽤나 쉬운 난이도의 문제였다.
예외처리 부분에서 좀 애를 먹기는 하였다.
Place 2
는 원래 b[2] - a[2]
였다. 테스트 해보니 55% 정도가 나왔었다.
같은 실패율에 대해 처리를 안해준 문제였는데, [4, 1, 2, 3]
에 대한 케이스는 성공하여 그대로 냈었다.
위와 같이 예외처리를 해준다면 완성도가 올라간다.
Place 1
부분은 원래 x[1]/users
였는데, 자바스크립트에서는 0/0
을 연산하면 NaN(Not-A-Number)이떠서 예외처리를 해 주었다. 해주니 80%에서 100%로 올라가 성공하였다.
외부링크
http://tech.kakao.com/2018/09/21/kakao-blind-recruitment-for2019-round-1/