*문제 출처는 프로그래머스에 있습니다.
문제 제목: 이진 변환 반복하기 (2단계)
문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/120817
문제 설명
나의 풀이
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(string s) {
vector<int> answer (2, 0); // answer은 두 개니깐
string bunary = ""; // 2진수를 담을 문자열
int s_len = 0; // 문자열 길이를 담을 변수
while (s != "1") { // s가 "1"이 될 때까지 진행한다.
for (char c : s) {
if (c == '0') answer[1]++; // 0의 개수를 구해서 answer[1]에 더해준다.
}
s.erase(remove(s.begin(), s.end(), '0'), s.end()); // 0을 모두 삭제한다.
s_len = s.size(); // 1만 남은 문자열 길이를 저장한다.
while (s_len > 0) { // 길이를 2진수로 변환한다.
if (s_len % 2 == 1) bunary.push_back('1');
else if (s_len % 2 == 0) bunary.push_back('0');
s_len /= 2;
}
reverse(bunary.begin(), bunary.end()); // 2진수를 뒤집는다. 그래야 원하는 값이 나옴
s = bunary; // 2진수를 다시 문자열로 변환
bunary.clear(); // 2진수는 삭제한다.
answer[0]++; // 이 과정이 진행될 때마다 1를 추가한다.
}
return answer;
}
※ 알아야 할 것
'코딩테스트(프로그래머스 & 백준) > 프로그래머스-C++' 카테고리의 다른 글
Programmers / 특이한 정렬 / C++ (0) | 2024.02.08 |
---|---|
Programmers / 올바른 괄호 / C++ (0) | 2024.02.07 |
Programmers / 숫자 짝꿍 / C++ (0) | 2024.02.02 |
Programmers / 달리기 경주 / C++ (0) | 2024.02.01 |
Programmers / 최빈값 구하기 / C++ (0) | 2024.01.31 |