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

GomHyeok·2022년 4월 4일
0

📒활용개념

1.문자열 split과 string to int
2. 진수 변환

📌문제설명

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

  • x의 모든 0을 제거한다
  • x의 길이를 c라고 한다면, x를 "c를 2진법으로 표현한 문자열"로 바꾼다.
    문자열 s가 변수로 주어질 때, s가 1이 될 때 까지 이진 변환을 가했을 때, 이진 변한 횟수와 변환 과정에서 제거된 모든 0의 갯수를 배열에 담아 return 하시오.

📌구현

#include <string>
#include <vector>
#include <iostream>

using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    int zero=0;								//제거된 0의 개수
    int cnt=0;								//이진 변환 횟수
    int size;								//이진변환해야하는 변수
    
    while(s!="1"){							//중지 조건 s=="1"
        string tmp;	
        
        cnt++;
        
        for(int i=0; i<s.size(); i++){		//0삭제
            if(s[i]=='0'){
                zero++;
            }
            else{
                tmp+=s[i];
            }
        }
        size=tmp.size();
        s="";
        
        while(size>0){						//진수 변환
            s+=to_string(size%2);
            size/=2;
        }
    }
    
    answer.push_back(cnt);
    answer.push_back(zero);
    
    return answer;
}

📌주의점

  • 문제에서 주어진 조건을 정확한 이해가 필요하다.
  • 0을 어떻게 제외하고 삭제할 것인가에 대한 생각.

사실 처음 문제를 봤을 때, 구현을 하는 것 보다 문제의 조건을 이해하는 것이 가장 어려운 문제였다. 비슷한 문제를 봤을 때 다시 문제를 이해하는 소모된는 시간을 줄일 수 있도록 해야겠다.

profile
github : https://github.com/GomHyeok/

0개의 댓글