쌓고 쌓다
[프로그래머스] 이진 변환 반복하기 C++ 풀이 본문
https://school.programmers.co.kr/learn/courses/30/lessons/70129?language=cpp
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
전체 코드
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> solution(string s) {
vector<int> answer;
int r1=0,r2=0;
while(s!="1")
{
r1++;
for(int i=0;i<s.length();i++)
{
if(s[i]=='0')
{
s.erase(s.begin()+i);
r2++;
i--;
}
}
int len = s.length();
string res="";
while(len!=0)
{
res+=to_string(len%2);
len/=2;
}
reverse(res.begin(),res.end());
s=res;
}
answer.push_back(r1);
answer.push_back(r2);
return answer;
}
풀이 방법
r1, r2는 각각 변환 횟수와 제거된 0의 개수를 나타냄.
문제에서 제시한대로 0을 모두 제거하고 남은 문자열의 길이를 2진법으로 바꿉니다.
이것을 문자열이 "1"이 될때까지 반복합니다.
for(int i=0;i<s.length();i++)
{
if(s[i]=='0')
{
s.erase(s.begin()+i);
r2++;
i--;
}
}
문자열 s에 0을 제거하는 코드이다.
int len = s.length();
string res="";
while(len!=0)
{
res+=to_string(len%2);
len/=2;
}
reverse(res.begin(),res.end());
s=res;
문자열 s의 길이 len을 2진법으로 바꾸는 과정이다.
변환후 s를 바뀐 이진법으로 교체한다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 올바른 괄호 C++ 풀이 (0) | 2022.09.29 |
---|---|
[프로그래머스] 최솟값 만들기 C++ 풀이 (0) | 2022.09.29 |
[프로그래머스] JadenCase 문자열 C++ 풀이 (0) | 2022.09.21 |
[프로그래머스] 최댓값과 최솟값 C++ 풀이 (0) | 2022.09.21 |
[프로그래머스] 튜플 C++ 풀이 (0) | 2022.08.04 |
Comments