트렐로 클론코딩

김민준·2023년 8월 9일
0
  1. 트렐로 클론코딩
    프로그래머스
    └ 크기의 한계
    좋은 코드

공부하며 느낀 점
참조한 사이트

1. 트렐로 클론코딩

이어짐

어제 정리한 대로 팀원들과 상의해서 js <> json의 문제, 서비스 레이어에서 처리해야할 것들이 컨트롤러 레이어에 있는 것, 일부 폴더명 수정, 와이어 프레임 수정등을 진행하였다.

프로그래머스

자연수 뒤집어 배열로 만들기

10억?,,, 딱히 중요한건 아닌듯한데 대체 왜?

주어진 수 n을 배열로 만든다음에 거꾸로 넣으면 될것같다.

자바스크립트로 자연수를 배열로 만드는 법을 구글에 검색했으나, 현재 문제의 풀이법만 나온 관계로 gpt4한테 물어봤다. 모르는 부분이 아니라 답 전체를 볼수는 없으니까...

라고한다.

index가 0이 아니라 1부터 시작하는걸보니 조금만 손보고, for문을 반대로 돌리면 원하는 결과가 나올 것 같다.

그런데 난 임의의 자연수라고 했는데 지맘대로 이쁘게 배열된 숫자를 가져오다니, 역시 ai는 완전히 믿을게 못된다.

나의 풀이

function solution(n) {
    var answer = [];
    const digits = String(n)
    const lengthOfN = digits.length - 1
    
    for (let i = lengthOfN ; i > -1 ; i--){
        answer[lengthOfN-i] = Number(digits[i])
    }
    
    return answer;
}

다른 사람의 풀이

function solution(n) {
    // 문자풀이
    // return (n+"").split("").reverse().map(v => parseInt(v));

    // 숫자풀이
    var arr = [];

    do {
        arr.push(n%10);
        n = Math.floor(n/10);
    } while (n>0);

    return arr;
}

보통은 위의 주석처리한대로 푸는데 아래의 방법이 매우 좋다.
10으로 나눈 나머지 = 가장 마지막 수를 배열에넣고,
n을 10으로 나눈다 = 한자리 땡긴다
이것을 계속 반복한다.

└ 크기의 한계

자바 스크립트의 double 사이즈는 약 21억, int32는 42억이다.(정확히는 2322^{32} = 4294967296) 현재, 문제에서 준 범위는 10억까지이기 때문에 문제가 없지만 0 하나만 더 붙였어도 문제가 생겼을 수 있다.
스트링의경우도 비슷하다.
자바 스크립트 string의 크기는 25212^{52}-1 로 10억 보다 크기 때문에 현재는 문제가 없다.
하지만 더 큰 수 또는 숫자의 크기가 다른 언어에서 이것을 적용해버리면 문제가 생길 수 있다. 그때에는 64비트를 쓰거나, number외의 형태로 다루는 다른 방법을 찾아봐야겠다.

좋은 코드

단순히 빠르기만해서는 좋은 코드가 아니다. 사람이 이해할 수 있어야한다.
즉, 보기만해도 무슨 일을 하는지 알 수 있어야한다.

그리고 속도를 개선할 부분이 전체에서 얼마나 큰 부분을 차지하는지 봐야한다. 전체의 속도를 느리게하는데서 낮은 비중을 차지하는 것을 개선했다고 치자. 그러면 시간도 낭비되고, 이상한 코드가 되었을 경우 가독성도 떨어진다. 시간을 들여서 더 나쁜 코드를 짜게 된 것이다.

  1. 서비스 전체에서 많은 시간을 들이는 부분을 찾는다.
  2. 그 부분이 왜 느린지 진단한다.
  3. 병렬화 캐싱을 통해서 속도를 확보한다.
    (이부분이 데이터를 직렬적으로 참조하는지 알아야한다.)

node.js 환경이라면 속도가 필요한 작업 부분만 c로 짠 라이브러리를 호출하거나, 정규식으로 native하게(추상화가 가정 적게) 구현하는 것이 좋다.

공부하며 느낀 점

참조한 사이트

마크다운 랭귀지

profile
node 개발자

0개의 댓글

관련 채용 정보