function solution(numbers, hand) {
var answer = '';
const keypad = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[-1, 0, -1]
];
let lx = 0;
let rx = 2;
let ly = 3;
let ry = 3;
for (let index = 0; index < numbers.length; index++) {
for (let i = 0; i < keypad.length; i++) {
for (let j = 0; j < keypad.length; j++) {
let d_l = Math.abs(lx - j) + Math.abs(ly - i);
let d_r = Math.abs(rx - j) + Math.abs(ry - i);
if (numbers[index] == keypad[i][j]) {
if (j == 0) {
lx = j;
ly = i;
answer += 'L';
} else if (j == 2) {
rx = j;
ry = i;
answer += 'R';
}
else {
if (d_l < d_r) {
lx = j;
ly = i;
answer += 'L';
} else if (d_l > d_r) {
rx = j;
ry = i;
answer += 'R';
} else {
if (d_l == d_r && hand == 'left') {
lx = j;
ly = i;
answer += 'L';
} else {
rx = j;
ry = i;
answer += 'R';
}
}
}
}
}
}
}
return answer;
}
문제 자체가 어려워 보이지 않았기 때문에 금방 할 수 있을 줄 알았다.
문제를 잘못 파악해서 두 세번 다시 코드를 뜯어 고쳤다.
중간에 key를 누르게 될 경우 해당 위치에서 다음 key의 거리를 계산해야 했는데, 그러질 못했고
전체적으로 문제를 완전히 파악하는데 시간이 오래걸린 느낌이다.
regex와 map을 적절히 잘 사용하여 코드 가독성 또한 뛰어났다.
아직 position배열의 의미는 잘 이해 못하겠지만, 대충 이해 될 것 같고, js의 활용도 뛰어나고 코드도 깔끔한 것 같다.
거리를 측정하는 함수
가장 가까운 key를 찾는 함수
정답 함수
나쁘지 않지만, 코드를 27줄로 줄일 수 있다면 줄이는 방식이 더 나아보인다.
grid방식을 이용해서 풀으셨다는데, 미숙한 눈으로 봤을 땐 한 눈에 이해하기 어려운 코드가 아닌가 싶습니다.(제가 미숙하여 그렇습니다. 죄송합니다..)
내 코드는 55줄로 변수명(lx, d_l 등)이 좀 덜 직관적이다.
불필요한 코드가 있는가..?
반복되는 부분이 있지만 일단은 이걸 한 번만 호출하는 것은 불가능해 보인다.
코드는.. 꽤나 직관적이라 생각하는데, 사람들은 어떻게 생각하는지 모르겠다.
오히려 너무 직관적이라 유아적이라 생각된다.
내가 만약 신입을 뽑을 개발자라면 당근 1위를 뽑을 것 같다.
map과 regex활용이 자유자제라는 점을 어필할 수 잇을 것 같고,
코드의 가독성도 다른 코드 못지 않으며, 일단 가장 짧기 때문이다.
그래서 나는 1위 코드를 분석하여 이해하고 안보고 다시 짤 수 있도록 노력할 것이다.
"돌아가기만 하면 되는 것 아니야? 적당히 가독성도 좋잖아?"
내가 백엔드를 관둔 이유도 이것 때문이라고 할 수 있겠다.
내 코드는 "돌아가고"
, "적당히 가독성도 있는 것"
처럼 보인다.
그 결과 나는 내 코드를 부끄러워 하게 되었고, 숨기기 급급한 코드로 전락했다.
모든 사람이 그래야 하는 것이라 생각하진 않는다.
다만 본인이 그렇게 느낀다면 일이 더 진행되기 전에 고쳐야 한다.