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;
}
실행 결과
'C++ 코딩 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[Programmers] 다음 큰 숫자 (0) | 2023.08.15 |
---|---|
[Programmers] 숫자의 표현 (0) | 2023.08.15 |
[Programmers] 최솟값 만들기 (0) | 2023.07.30 |
[Programmers] JadenCase 문자열 만들기 (0) | 2023.07.28 |
[Programmers] 정수 삼각형 (0) | 2023.07.21 |
댓글