728x90
문자열 s가 주어지고 해당 문자열은 0과 1로 이루어져있다.
문자열 s에서 0을 제거하고 이진변환을 하는 작업을 반복해
문자열 s를 "1"로 만들어준다.
이때 1로만 이루어질때 까지 이진변환을 하였을 때, 변환 횟수와 변환 과정에서 제거한 0의 개수를
배열에 담아서 리턴하는 문제이다.
우선 while 반복문을 사용하여 s가 1이 될때까지 반복해준다.
다음 문자열 s의 1의 개수를 count함수를 사용해 정수 a에 넣어주고
zerocount 정수형 변수에 s.size() - a를 하여 제거한 0의 개수를 받아주고 answer에 넣어준다.
그다음 문자열 s를 clear함수를 통해 초기화 해주고
bitset 함수를 이용하여 a(1의개수)를 이진변환해 binary변수에 저장해준다.
변환된 binary를 to_string함수로 문자열로 변경하여 s에 저장하고
find_first_not_of("찾을문자")함수를 이용해 0이 아닌부분을 찾고
substr(시작위치) 함수를 이용하여 0을 다 잘라내고
bitcount를 ++ 이진변화 카운트를 더해준다.
처음에 풀었을 때
실패 (signal: segmentation fault (core dumped)) 이러한 오류가 나와 찾아보니
vector의 크기를 지정하지 않은 상태에서 존재하지않은 인덱스의 접근으로 인한 오류라고 하여
그래서 처음 vector<int> answer의 크기를 미리 할당하여 주어 해결하였다.
728x90
'프로그래머스 C++' 카테고리의 다른 글
프로그래머스 다음 큰 숫자 C++ (0) | 2024.11.05 |
---|---|
프로그래머스 숫자의 표현 C++ (0) | 2024.11.04 |
프로그래머스 JadenCase 문자열 만들기 C++ (0) | 2024.11.02 |
프로그래머스 최솟값 만들기 C++ (1) | 2024.11.02 |
프로그래머스 최댓값과 최솟값 (0) | 2024.11.02 |