CodeKata 2 - W1D4

Yonghyun·2021년 9월 16일
0

CodeKata

목록 보기
2/5

문제

숫자인 num을 인자로 넘겨주면, 뒤집은 모양이 num과 똑같은지 여부를 반환해주세요.

num: 숫자
return: true or false (뒤집은 모양이 num와 똑같은지 여부)


예를 들어,
num = 123
return false 
=> 뒤집은 모양이 321 이기 때문

num = 1221
return true 
=> 뒤집은 모양이 1221 이기 때문

num = -121
return false 
=> 뒤집은 모양이 121- 이기 때문

num = 10
return false 
=> 뒤집은 모양이 01 이기 때문

첫번째 풀이

const sameReverse = num => {
  const revNum = num.toString().split('').reverse().join('');
  return num.toString()===revNum;
}

그냥 주절주절 이어 붙여서 썼다. 처음엔

return num.toString()===revNum ? true : false ;

로 써줬었는데 굳이 쓸 필요가 없었다.
무작정 코드를 줄이는 것만이 좋은건 아니지만 불필요한 코드는 진작에 없애버리자.
너무 많은 글자는 정신건강에 해롭다...

어쨌든 W1D3 문제는 너무 어려워서 아직도 test case 두개를 못풀어서 주말에 풀 예정인데 그거에 비해 오늘 문제는 간단한 편이어서 금방 풀수 있었다. 생각을 그렇게 많이 하지 않고 풀어서 다른 풀이가 없나 다시 생각을 해봤고 두번째 코드를 작성했다.

두번째 풀이

const sameReverse = num => {
  num = num.toString();
  for(let i = 0; i < num.length/2; i ++){
    return num[i]===num[num.length-(1+i)] ? true : false;
  }
}

첫번째 풀이에서 문자로 만들고 잘라서 뒤집고 다시 붙이는 과정이 너무 지저분해보여서 좀 깔끔해보이는 코드를 작성하고 싶어서 생각하다가 for문을 써봤다.
자리수가 홀수인경우 무조건 가운데 숫자는 같고 가운데 숫자를 기준으로 앞과 뒤로 나눴을 때 앞부분은 for문을 통해 0번째 인덱스부터 구하고 뒷부분은 마지막 index부터 구해서 각각 비교했을때 모두다 같으면 뒤집어도 같은 수가 될 것이다. 자리수가 짝수인 경우는 절반으로 나누어서 홀수인 경우와 마찬가지로 비교해주면 된다.
이렇게 했을때도 모든 test case가 success가 떴다. 확실히 첫번째 풀이보다 깔끔해보이기는 하지만 더 좋은 코드라고 할 수 있을지는 아직 모르겠다...
두번째 코드를 작성하는 과정에서 처음에 return값 조건을

num[i] === num[num.length-1]

로 주고 test case를 돌렸는데 모두다 success가 떴다. 저 조건이면 마지막 자리의 숫자랑만 비교하는게 될텐데 test case가 우연히 맞아서 그랬던 것 같다. 저렇게 실수하면 나중에 에러가 발생했을때 발견하기 어려울 수 있으니 처음 코드를 작성할때 조건을 하나하나씩 잘 체크하면서 코드를 작성해야겠다.

다음번엔 좀더 효율적이고 보기 좋은 코드를 짤 수 있길 바라며.... 🥲

profile
Life is all about timing.

0개의 댓글