TIL 20221222 - 167번

hoin_lee·2022년 12월 23일
0

TIL

목록 보기
132/236

오늘 공부

알고리즘 문제 풀기(프로그래머스)
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/70129

function solution(s) {
    let zeroCount = 0
    let cycle = 0
    while(s!="1"){
        let arr = s.split("")
        let asArr = arr.filter(v=>v==="1")
        zeroCount += s.length-asArr.length
        s = asArr.length.toString(2)
        cycle++
    }
    return [cycle,zeroCount];
}
  • 먼저 싸이클과 제거한 0의 개수를 체크할 변수를 만든다.
  • while문을 통해 결과가 마무리 될때까지 반복문을 돌린다.
  • 배열을 이용해 풀었고 0을 제거한 값은 원래 s의 길이에서 filter를 통해 1만 추려낸 배열의 길이를 뺀 값과 같기 때문에 그 값을 더해준다.
  • 다시 s는 1만 추려낸 배열의 길이를 toString을 통해 2진법으로 변환 시켜 할당하고
  • 싸이클을 추가
    아래는 배열화를 시키지 않고 match를 이용해 푼 코드이다. 성능적으론 while문이 메모리는 1MB 더 낮게 쓰고, 시간은 5.18ms 더 빨랐다.
function solution(s) {
    var answer = [0,0];
    while(s.length > 1) {
        answer[0]++;
        answer[1] += (s.match(/0/g)||[]).length;
        s = s.replace(/0/g, '').length.toString(2);
    }
    return answer;
}
profile
https://mo-i-programmers.tistory.com/

0개의 댓글