[Programmers 알고리즘, C++]#Level 2_이진 변환 반복하기
Programmers 알고리즘 문제 풀이, Level 2_이진 변환 반복하기
이진 변환 알고리즘과 STL 알고리즘을 활용하여 풀이하는 문제입니다.
문제
풀이
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool Pred(char c)
{
return c == '0';
}
vector<int> solution(string s) {
vector<int> answer;
int delete0Cnt = 0;
int decToBinCnt = 0;
vector<int> tmpV;
while(s != "1")
{
// 1. 0 제거, for 문을 돌면서 삭제하면 String에 직접적인 변화
for(int i=0; i<s.size(); i++)
{
if(s[i] == '0')
{
++delete0Cnt;
}
}
auto it = remove_if(begin(s), end(s), Pred);
s.erase(it, end(s));
// 2. size 길이 -> 이진 변환
int n = (int)s.size();
while(n>0)
{
int tmp = n%2;
tmpV.push_back(tmp);
n /= 2;
}
string str = "";
for(int i=0; i<tmpV.size(); i++)
{
str += (tmpV[i]+'0');
}
s = str;
decToBinCnt++;
tmpV.clear();
}
answer.push_back(decToBinCnt);
answer.push_back(delete0Cnt);
return answer;
}
1. 이진 변환 알고리즘
while(n>0) { int tmp = n%2; tmpV.push_back(tmp); n /= 2; }
2. erase 알고리즘
반복문을 돌며 "erase" 알고리즘을 호출하면 항목들의 이동이 발생하기 때문에 특정 항목의 삭제 작업이 제대로 진행되지 않을 수 있습니다. 따라서, remove_if(begin(v), end(v), Pred) 알고리즘을 통해 프레디킷 함수(세 번째 인자)와 합치하는 항목을 컨테이너의 뒤로 보낸 뒤에 삭제 작업을 진행해야 합니다!
'문제 풀이 > Programmers 문제 풀이' 카테고리의 다른 글
[Programmers]#Level2_요격 시스템, 정렬, 최대 중복 구간 (0) | 2023.09.23 |
---|---|
[Programmers 알고리즘, C++]#Level2_다음 큰 숫자, bitset, 이진법 변환, cmath 헤더 파일 (0) | 2022.10.26 |
[Programmers 알고리즘, C++]#Level2_JadenCase 문자열 만들기 (1) | 2022.09.25 |
[Programmers 알고리즘, C++]#Level1_정수 내림차순 정렬 (1) | 2022.09.25 |
[Programmers 알고리즘, C++]#Level2_오픈 채팅방 (0) | 2022.08.14 |