[프로그래머스] 이진 변환 반복하기

Mincho·2023년 1월 4일
0
post-thumbnail

🔴이진 변환 반복하기

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

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

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

❗제한 사항
◾ s의 길이는 1 이상 150,000 이하입니다.
◾ s에는 '1'이 최소 하나 이상 포함되어 있습니다.

👉입출력 예

sresult
"110010101001"[3,8]
"01110"[3,3]
"1111111"[4,1]



😶나의 풀이

  s문자열을 배열로 만들고 while반복문을 통해 문자열s"1"이 될때까지 반복하도록한다. while문안에서는 s문자열에서 제거한 0의 갯수인 zerocount를 카운트하는 로직0을 제거한 길이의 이진 변화를 반환하는 binary함수로직을 수행한다. 그리고 위의 로직들을 모두 한번씩 수행할때 마다 count를 1씩 더해 로직을 수행하는 횟수를 체크한다.

function binary(num){		// 2진변환 과정
    const data = [...num]
    const reset = data.filter((e)=>
               e !== "0")
    return reset.length.toString(2)
}

function solution(s) {
    var answer = [];
    let count = 0
    let zerocount = 0
    while(s != "1"){
        for(i = 0 ; i < s.length ; i++){		//0갯수 count
            s[i] === "0" ? zerocount++ : zerocount
        }
        s = binary(s)
        count++
    }
    answer.push(count,zerocount)
    return answer;
}



😎후기..

  그렇게 어렵지 않은 문제였지만 위의 코드에서 0을 count해주는 함수도 만들어 주려다 실패하여 그냥 binary함수 하나만 만들어주어 문제를 풀었다. 여러 함수를 만들어주어 풀어주는 방식 또한 생각해봐야겠다.

👍올바른 피드백은 언제든지 환영입니다~!

profile
사진찍는 개발자.

0개의 댓글