문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/77885
두 가지 경우의 수를 고려해야 하는 문제였습니다.
1. 짝수인 경우 끝 비트가 0이므로 1만 더해주면 됩니다.
2. 홀수인 경우 끝 비트가 1이기 때문에 1을 더해주면 비트가 상당히 많이 바뀝니다. 따라서, 짝수와는 다른 방법으로 접근해야 합니다.
2.1 끝에서부터 즉, 2^0승부터 연속되는 1의 개수 k를 구하고 2^(k-1)을 더해주면 비트가 최소로 바뀌는 다음 숫자를 구할 수 있습니다.
2.2 예를 들자면, 110111은 k가 3이므로 100을 더해주면 111011이 되고 비트는 두 개만 바뀌면서 110111보다 큰 수입니다.
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > programmers' 카테고리의 다른 글
[Programmers] 없는 숫자 더하기 (0) | 2021.10.08 |
---|---|
[Programmers] 110 옮기기 (0) | 2021.10.08 |
[Programmers] 괄호 회전하기 (0) | 2021.10.06 |
[Programmers] 약수의 개수와 덧셈 (0) | 2021.10.06 |
[Programmers] 음양 더하기 (0) | 2021.10.06 |