반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 문제
n보다 크면서 이진수로 바꾸었을 때 1의 개수가 같은 숫자를 찾아내는 문제다.
- 풀이
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
int now2 = 0, next2 = 0, temp;
temp = n;
while(temp != 0){
if(temp%2 == 1){
now2++;
}
temp /= 2;
}
while(1){
temp = ++n;
next2 = 0;
while(temp != 0){
if(temp%2 == 1){
next2++;
}
temp /= 2;
}
if(next2 == now2){
break;
}
}
answer = n;
return answer;
}
n부터 시작해서 +1씩 해주면서 모든 경우에 대해 이진수로 변환한 다음 1을 세보았다.
맞기는 했지만 너무 비효율적인거 같아서 다른 사람은 어떻게 했나 봤는데, 와우!
#include <bitset>
using namespace std;
int solution(int n) {
int num = bitset<20>(n).count();
while (bitset<20>(++n).count() != num);
return n;
}
bitset을 이용해서 1의 개수를 세는 방법은 진짜 생각하지도 못했었다!
- 기억할 것!
bitset을 이용해서 이진수 쉽게 접근할 수 있다.
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 다항식 더하기 C++ (0) | 2022.10.31 |
---|---|
프로그래머스 카펫 C++ (0) | 2022.10.23 |
프로그래머스 주식가격 C++ (0) | 2022.10.22 |
프로그래머스 타겟 넘버 C++ (0) | 2022.10.22 |
프로그래머스 프린터 C++ (0) | 2022.10.22 |