프로그래머스 Lv.2 코딩테스트

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

하다블 2022. 9. 20. 18:04
반응형

문제는 다음과 같습니다.

https://school.programmers.co.kr/learn/courses/30/lessons/70129?language=cpp 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 코드는 다음과 같습니다.

#include <string>
#include <vector>

using namespace std;
string t_to_b(int n)
{
    string temp{""};
    while(n!=0)
    {
        if(n%2==1)
        {
            temp+="1";
        }
        else
        {
            temp+="0";
        }
        n/=2;
    }
    return temp;
}
vector<int> solution(string s) {
    vector<int> answer;
    int count{0},count_zero{0};
    while(s!="1")
    {
        string tmp{""};
        count++;
        int remove_zero{0};
        for(int i{0};i<s.size();i++)
        {
            if(s[i]=='0')
            {
                remove_zero++;
                continue;
            }
            tmp+=s[i];
        }
        count_zero+=remove_zero;
        s=t_to_b(tmp.size());
    }
    answer.push_back(count);
    answer.push_back(count_zero);
    
    return answer;
}

이 문제의 경우 설명에 해야 하는 알고리즘이 모두 적혀있으므로 구현만 하면 되는 쉬운 문제입니다.

구현해야 하는 코드의 순서는 다음과 같습니다.

1. 주어진 문자열이 "1"인지 아닌지 확인하기

2. "1"이 아니면 변환한 횟수(count)를 증가하고 주어진 문자열에 존재하는 0을 확인하여 0을 얼마나 지우는지(remove_zero) 확인하고 총 지운 0의 개수(count_zero)에 추가하기

3. 변환한 문자열의 길이를 2진수로 변경하기 (t_to_b 함수)

4. 반복하기

구현만 하면 되는 문제이기 때문에 어려움 없이 해결하실 수 있을 겁니다.

반응형