본문 바로가기

Algorithm/Implementation

(C++) - 프로그래머스(월간코드챌린지) : 이진 변환 반복하기 답

반응형

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

 

코딩테스트 연습 - 이진 변환 반복하기

 

programmers.co.kr

구현 문제였습니다.

📕 풀이방법

📔 풀이과정

문제 대로 구현합니다.

deleteZero()로 0들을 제거해줍니다.

convertToBin()으로 제거된 문자열의 길이를 이진으로 변환한 문자열 얻습니다.

📔 정답출력

{converted, deleted}를 반환해줍니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;

int converted, deleted;

string deleteZero(string s){
  string deletedStr;
  for(auto c : s) {
    if(c != '0') deletedStr += c;
    else deleted++;
  }
  return deletedStr;
}

string convertToBin(string s){
  string convertedStr;
  int num = s.size();
  converted++;
  while(num){
    convertedStr += to_string(num % 2);
    num /= 2;
  }
  reverse(convertedStr.begin(), convertedStr.end());
  return convertedStr;
}

vector<int> solution(string s) {
    converted = 0;
    deleted = 0;
    string str = s;
    while(1){
      if(str == "1") break;
      str = deleteZero(str);
      str = convertToBin(str);
    }
    return {converted, deleted};
}

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.