알고리즘 문제 풀기(프로그래머스)
https://github.com/hoinlee-moi/Algorithm
JS기본문법 다시 공부
https://github.com/hoinlee-moi/ModernJS
React 강의 듣기
https://github.com/hoinlee-moi/React_prac
오늘 알고리즘
점프와 순간이동 - https://school.programmers.co.kr/learn/courses/30/lessons/12980
function solution(n){
let ans = 0;
while(true){
if(n%2!==0) {
n -= 1
ans++
}
n /= 2
if(n <=0) break;
}
return ans;
}
순간이동을 많이 사용해야 하기 때문에 계속해서 2로 나누면 된다.
이때 홀수가 등장하게 될 경우 한칸 이동 해 짝수로 만들어 계산해야되기 때문에 -1을 시켰다
아래는 2진수를 활용한 방법인데 아주 근소한 차이가 있지만 더 빠르고 더 적은 메모리를 사용했다.
어떠한 수를 2로 나누고, 그 몫을 또 2로 계속해서 나누면서 나오는 나머지들의 모든 합은
어떠한 수를 이진수로 변환한 수의 1의 개수와 같다는 것을 이용한 것이다
function solution(n){
if(n === 1) return 1;
const nArr = Array.from(n.toString(2));
console.log(nArr)
return nArr.reduce((a,b)=>(+a)+(+b));
}
React
처음부터 에러메세지를 읽어보고 분석하고 구글링 해보는 습관을 길러놔서 인지 이제 에러가 오히려 더 재밋게 느껴지기도 한다.
분명 안되는 부분이지만 그걸 해결하면서 오는 쾌감은 확실히 있다.
대부분의 에러는 에러메세지를 확인함으로써 해결되는 게 있지만 올바른 이벤트 동작을 하지 않는 에러가 있다
이런 류는 메세지도 없고 이벤트는 이상하지만 작동을 하다보니 터미널에는 없고..하지만 디버깅 하는 2가지 방법이 있다.
이벤트 시작지점으로 돌아가면서 점점 좁혀나가는 것이다.
어느 코드에서 시작했고 그 코드에서 살펴볼 때 이상이 없는지 확인하고 그 위로 올라가서 확인하고 올라가서 확인하고 를 계속 하다보면 점점 좁아져 정답이 보이기 시작한다.
콘솔을 보면 에러메세지들이 있는데 자바스크립트 개발과 디버깅 콘솔로 우리가 코드에 추가한 로깅 메세지들을 보여주고 또 라이브러리가 제시하는 경고와 오류메세지가 있다.
다만 전체 프로그램을 충돌시키는 것은 아니다.
콘솔에 뜨는 오류 메세지를 잘 살펴보자