본문 바로가기
C++ 코딩 문제 풀이/프로그래머스

[Programmers] 이진 변환 반복하기

by 섬댕이 2023. 7. 30.

https://school.programmers.co.kr/learn/courses/30/lessons/70129

 

프로그래머스

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

programmers.co.kr

 


 

문제 해결 과정

착안

문제에서 요구한 것과 같이, 주어진 문자열에서 0을 제거하면서 횟수를 계산하고 0을 제외한 나머지 문자열의 길이를 이진법으로 변환하는 과정을 반복하면서 변환 횟수를 계산한다.

 

구현

십진법의 숫자를 이진법으로 변환하는 과정은 비트 연산을 활용하여 구현하였다.

 

[스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~

더보기
#include <string>
#include <vector>

using namespace std;

vector<int> solution(string s)
{
	vector<int> answer(2);
	while (true)
	{
		if (s == "1")
			break;

		string temp;
		for (char c : s)
			if (c == '1')
				temp += "1";
			else
				answer[1]++;

		int n = temp.size();
		int z = 0x01;
		temp = "";
		while (n >= z)
		{
			temp = (n & z ? "1" : "0") + temp;
			z <<= 1;
		}
		
		s = temp;
		answer[0]++;
	}

	return answer;
}

 

실행 결과

댓글