일기-74

정해준·2024년 6월 7일

프로그래머스 문제 정리

이진변환 반복하기

문제:
0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.

x의 모든 0을 제거합니다.
x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다.
예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다.

0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.

풀이:

function solution(s) {
    let answer = [];
    
    let checkTransformBinary = 0;
    let checkZero = 0;
    let checkString = s;
    
    while(checkString !== "1"){
        const deleteZero = checkString.replace(/0/g,"");
        
        checkZero += checkString.length - deleteZero.length;
        
        checkString = deleteZero.length.toString(2);
        
        checkTransformBinary += 1;
    }
    
    answer.push(checkTransformBinary)
    answer.push(checkZero)
    
    return answer;
}

피보나치 수

문제:
피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.

예를들어

F(2) = F(0) + F(1) = 0 + 1 = 1
F(3) = F(1) + F(2) = 1 + 1 = 2
F(4) = F(2) + F(3) = 1 + 2 = 3
F(5) = F(3) + F(4) = 2 + 3 = 5
와 같이 이어집니다.

2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.

풀이:

function solution(n) {
    let answer = 0;
    const number = [0,1];
    for(let i=2; i <= n; i++){
        number.push((number[i-1] + number[i-2]) % 1234567);
    }
    answer = number[n];
    return answer;
}

3개의 댓글

comment-user-thumbnail
2024년 6월 7일

안녕하세요! 혹시 구글 이메일 확인해줄 수 잇으신가용?? 광고가 아니라 사이드 프로젝트 관해서 연락드린게 있어서요! 슬랙으로 연락을 드리고 싶은데 비활성화여서 이렇게 이메일이랑 블로그에 연락드려요 ㅠ

1개의 답글