일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 그리디알고리즘
- DirectX12
- DirectX 12
- 쓰레드
- 멀티쓰레드
- directx
- 다이나믹 프로그래밍
- 멀티프로세서
- 락
- 그리디 알고리즘
- Direct12
- codility
- 운영체제
- 디자인패턴
- I/O장치
- 영속성
- 컨디션 변수
- 파일시스템 구현
- 자료구조
- 알고리즘
- 병행성 관련 오류
- 프로그래머스
- 스케줄링
- 다이나믹프로그래밍
- OS
- 백준
- 병행성
- 동적계획법
- 타입 객체
- 렌더링 파이프라인
Archives
- Today
- Total
기록공간
다음 큰 숫자 (프로그래머스) 본문
반응형
이진수로 변환하는 방법을 알고 있다면 어렵지 않게 풀 수 있는 문제였다. 이진수 변환 방법은 이전 문제를 풀 때 사용했던 방법을 그대로 사용하였다. 자세한 내용은 다음 링크를 참고하자.
풀이 과정을 설명하기 전에 함수 one_count()를 구현한다. 이 함수는 특정 숫자를 매개변수로 받아 그 숫자의 이진수 값이 가지는 1의 갯수를 반환해준다. 이 문제에서 중요한 것은 이진수에서의 1의 갯수가 서로 같은 것이므로 이진수 값으로 변환할 필요 없이 1의 갯수만 세어주면 된다.
접근 방법은 다음과 같다.
-
입력 받은 숫자 n을 one_count(n)으로 1의 갯수를 구해 count라는 값에 저장해놓는다.
-
이제 n을 임시 변수 tmp에 담아놓고 tmp를 1씩 증가시킨다.
-
one_count(tmp)가 count와 같다면 위 조건을 만족하는 숫자이므로 정답으로 반환한다.
코드는 다음과 같다.
int one_count(int num)
{
int result = 0, count = 0, tmp = num;
while(tmp != 0)
{
tmp /= 2;
++count;
}
for(int i = count - 1; i >= 0; --i)
if((num >> i) & 1) result += 1;
return result;
}
int solution(int n) {
int answer = n, count = one_count(n);
while(true) if(count == one_count(++answer)) break;
return answer;
}
반응형
'Algorithm > 문제' 카테고리의 다른 글
조이스틱 (프로그래머스) (0) | 2020.06.16 |
---|---|
체육복 (프로그래머스) (0) | 2020.06.16 |
올바른 괄호 (프로그래머스) (0) | 2020.06.12 |
카펫 (프로그래머스) (0) | 2020.06.12 |
가장 큰 정사각형 찾기 (프로그래머스) (0) | 2020.06.10 |
Comments