[Algorithm] 이진 변환 반복하기

2025. 1. 22. 09:42·Algorithm/Practice

문제 설명

0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. 

  • x의 모든 0을 제거합니다.
  • x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다.

예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다.

0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.

 

문제 풀이

  1. 문자열을 순회하며 0과 1의 개수를 구한다.
  2. 0의 개수를 결과값에 더해준다.
  3. 1의 개수로 새로운 바이너리 문자열을 만든다.
  4. 문자열이 "1"이 될 때까지 1~3 과정을 반복한다.

 

코드 작성

#include <string>
#include <bitset>
#include <vector>

using namespace std;

std::string decimalToBinary(int number) {
    return std::bitset<32>(number).to_string(); // 32비트로 변환
}

vector<int> solution(string s) {
    vector<int> answer(2, 0);
    
    while (s != "1")
    {
        int zeroCount = 0;
        int oneCount = 0;
        
        // 0의 개수와 1의 개수를 구한다.
        for (const char& ch : s)
        {
            if (ch == '0') ++zeroCount;
            if (ch == '1') ++oneCount;
        }
        
        // 결과값을 계산한다.
        answer[0]++;
        answer[1] += zeroCount;
        
        // 1의 개수로 새로운 s를 만든다.
        string binaryString = decimalToBinary(oneCount);
        binaryString.erase(0, binaryString.find_first_not_of('0'));
        
        s = binaryString;
    }
    
    return answer;
}

'Algorithm > Practice' 카테고리의 다른 글

[Algorithm] 카펫  (1) 2025.01.23
[Algorithm] 피보나치 수  (0) 2025.01.23
[Algorithm] JadenCase 문자열 만들기  (1) 2025.01.22
[Algorithm] 최댓값과 최솟값  (0) 2025.01.22
[Algorithm] 신고 결과 받기  (0) 2025.01.21
'Algorithm/Practice' 카테고리의 다른 글
  • [Algorithm] 카펫
  • [Algorithm] 피보나치 수
  • [Algorithm] JadenCase 문자열 만들기
  • [Algorithm] 최댓값과 최솟값
DevColIn
DevColIn
복잡함을 단순하게
  • DevColIn
    심플한 코딩생활
    복잡함을 단순하게
  • 전체
    오늘
    어제
    • 전체보기 (223)
      • Unreal 부트캠프 (49)
        • TIL (34)
        • 사전캠프 (7)
        • 본캠프 (8)
      • Unrael (10)
        • 환경설정 (0)
        • Basic (19)
        • Component (5)
        • GAS (GameplayAbilitySystem) (3)
        • AI (2)
        • Implement (10)
        • UI (1)
        • Error (1)
        • Network (2)
        • Tip (1)
      • Level Design (5)
      • Math (1)
      • Design Pattern (16)
      • Computer Science (2)
        • Network (1)
        • Database (1)
      • Algorithm (79)
        • Basic (4)
        • Practice (74)
      • C++ (4)
        • Basic (4)
      • Tool (0)
      • Game (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    basic
    AI
    게임동기화
    레벨디자인
    디자인 패턴
    DesignPattern
    Animation
    본캠프
    퀘스트
    actor
    Til
    GameplayEffect
    내일배움캠프
    사전캠프
    component
    Algorithm
    assetmanager
    Implement
    unreal
    액터
    Design Pattern
    하드 레퍼런싱
    알고리즘
    디자인패턴
    소프트 레퍼런신
    tsoftobjectptr
    c++
    KPT회고
    unrealengine
    gas
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
DevColIn
[Algorithm] 이진 변환 반복하기
상단으로

티스토리툴바