- 트렐로 클론코딩
프로그래머스
└ 크기의 한계
좋은 코드공부하며 느낀 점
참조한 사이트
어제 정리한 대로 팀원들과 상의해서 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억이다.(정확히는 = 4294967296) 현재, 문제에서 준 범위는 10억까지이기 때문에 문제가 없지만 0 하나만 더 붙였어도 문제가 생겼을 수 있다.
스트링의경우도 비슷하다.
자바 스크립트 string의 크기는 로 10억 보다 크기 때문에 현재는 문제가 없다.
하지만 더 큰 수 또는 숫자의 크기가 다른 언어에서 이것을 적용해버리면 문제가 생길 수 있다. 그때에는 64비트를 쓰거나, number외의 형태로 다루는 다른 방법을 찾아봐야겠다.
단순히 빠르기만해서는 좋은 코드가 아니다. 사람이 이해할 수 있어야한다.
즉, 보기만해도 무슨 일을 하는지 알 수 있어야한다.
그리고 속도를 개선할 부분이 전체에서 얼마나 큰 부분을 차지하는지 봐야한다. 전체의 속도를 느리게하는데서 낮은 비중을 차지하는 것을 개선했다고 치자. 그러면 시간도 낭비되고, 이상한 코드가 되었을 경우 가독성도 떨어진다. 시간을 들여서 더 나쁜 코드를 짜게 된 것이다.
병렬화
캐싱
을 통해서 속도를 확보한다.node.js 환경이라면 속도가 필요한 작업 부분만 c로 짠 라이브러리를 호출하거나, 정규식으로 native하게(추상화가 가정 적게) 구현하는 것이 좋다.