https://school.programmers.co.kr/learn/courses/30/lessons/70129
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
using namespace std;
vector<int> solution(string s) {
vector<int> answer;
int convCnt=0;
int eraseZero=0;
while(s!="1")
{
int len=0;
for(int i=0;i<s.length();i++)
{
if(s[i]!='0')len++;
else eraseZero++;
}
int num = len;
string con;
while(num>0)
{
con+=(num%2)+'0';
num/=2;
}
// string reverse
for(int i=0;i<con.length()/2;i++)
{
char c = con[i];
con[i]= con[con.length()-1-i];
con[con.length()-1-i]=c;
}
s=con;
convCnt++;
}
answer.push_back(convCnt);
answer.push_back(eraseZero);
return answer;
}
이진 변환 반복을 통해 문자열이 "1"이 될 때까지 반복해서 0이 지워진 개수와 총 몇번 변환됐는지를 리턴하는 문제이다.
규칙은 다음과 같다.
1. 문자열에서 0을 지운다.
2. 새로운 문자열의 개수를 c라고 할 때, c를 이진수로 변환해서 문자열로 만든다.
3. 문자열이 "1" 아니면 다시 1번부터 반복한다.
while문을 통해 "1"인지 판단하고 반복문을 통해 1과 0의 개수를 세서 변수에 저장하고
con 변수에 이진수로 바꾼 문자열을 저장한다.
나머지연산을 통해 만든 이진수는 거꾸로 저장되기 때문에 문자열을 뒤집어주고 s에 다시 저장한다.
'알고리즘 > 프로그래머스 2단계' 카테고리의 다른 글
프로그래머스 - 의상 - C++ (0) | 2024.07.30 |
---|---|
프로그래머스 - 구명보트 - C++ (0) | 2024.07.30 |
프로그래머스 - 피보나치 수 - C++ (0) | 2024.07.30 |
프로그래머스 - JadenCase 문자열 만들기 - C++ (0) | 2024.07.29 |
프로그래머스 - 최솟값 만들기 - C++ (0) | 2024.07.29 |