[Programmers 알고리즘, C++]#Level2_이진 변환 반복하기

2022. 9. 25. 20:09· 문제 풀이/Programmers 문제 풀이
목차
  1.  
  2. [Programmers 알고리즘, C++]#Level 2_이진 변환 반복하기

 

[Programmers 알고리즘, C++]#Level 2_이진 변환 반복하기

Programmers 알고리즘 문제 풀이, Level 2_이진 변환 반복하기

이진 변환 알고리즘과 STL 알고리즘을 활용하여 풀이하는 문제입니다.

 


 

문제

출저: Programmers Level 2 이진 변환 반복 문제

 

풀이
#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
  1.  
  2. [Programmers 알고리즘, C++]#Level 2_이진 변환 반복하기
'문제 풀이/Programmers 문제 풀이' 카테고리의 다른 글
  • [Programmers]#Level2_요격 시스템, 정렬, 최대 중복 구간
  • [Programmers 알고리즘, C++]#Level2_다음 큰 숫자, bitset, 이진법 변환, cmath 헤더 파일
  • [Programmers 알고리즘, C++]#Level2_JadenCase 문자열 만들기
  • [Programmers 알고리즘, C++]#Level1_정수 내림차순 정렬
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • 트리
  • DP
  • C++
  • dfs
  • 우선순위 큐
  • 최단 경로
  • Unreal Blueprint
  • 알고리즘
  • programmers
  • 기술 질문
  • set
  • unreal
  • BOJ
  • BFS
  • 개발
  • 디자인 패턴
  • 그래프
  • Effective C++
  • 정렬
  • stl

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Programmers 알고리즘, C++]#Level2_이진 변환 반복하기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.