새소식

코딩테스트/프로그래머스

[C++] 이진 변환 반복하기

  • -

[문제]

코딩테스트 연습 - 이진 변환 반복하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

[문제 풀이]

해당 문제를 풀기 위해 2가지 함수를 추가로 만들어서 진행을 하였다.

1. 0을 제거하고 제거한 0의 수만큼 추가를 해주는 함수 2. 1로만 이루어진 문자열을 길이의 크기로 바꾼뒤 해당 크기를 이진법으로 나타내는 함수.

 

1번의 경우 string을 가면서 '1'이 아니면 계속해서 zero 변수에 수를 추가 아니라면 반환값인 answer에 1의 숫자만큼 넣어주었다.

2번의 경우 이진법으로 바꾸기 위해서 %2의 값을 계속해서 넣고 /2를 해주었다. 그렇게 넣어진 %값들을 마지막에 reverse를 통해서 고쳐주었다.

[회고]

어렵지 않은 문제이며 동시에 정답률 또한 높은 이유가 충분히 있었던 문제였다.

다음 문제로 넘어가자.

[코드]

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

int zero = 0;

string divide(string s){
    string answer;
    zero = 0;
    
    for(int i = 0;i<s.size();i++){
        if(s[i] == '1')
            answer += s[i];
        else
            zero++;
    }
    
    return answer;
}

string stringLength(string s){
    string answer;
    int num = s.length();
    
    while(num >= 1){
        answer += to_string(num % 2);
        num /= 2;
        //6 => 3...0 => 1... 1... 0
    }
    reverse(answer.begin(),answer.end());    
    
    return answer;
}

vector<int> solution(string s) {
    vector<int> answer;
    answer.resize(2);
    
    int num = 3;
    while(s != "1"){
        s = divide(s);
        s = stringLength(s);
        answer[1] += zero;
        answer[0]++;
    }
    
    return answer;
}

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[Swift] 짝수와 홀수  (0) 2023.09.23
[Swift] 평균 구하기  (0) 2023.09.23
[C++] 이중우선순위큐  (0) 2023.08.23
[C++] 최고의 집합  (0) 2023.08.23
[Swift] 상담원 인원  (0) 2023.08.20
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.