문제 설명
상세한 설명은 프로그래머스에서 확인할 수 있습니다.
자연수 n을 이진법으로 표현했을 때의 1의 개수가 같으며 n보다 큰 자연수 중 가장 작은 값을 구하는 문제입니다.
예를 들어 4를 이진법으로 표현하면 0100이고, 이보다 크면서 1의 개수가 1개인 수 중 가장 작은 값은 1000인 8입니다.
제한 사항
- n <= 1,000,000
입출력 예시
n | result |
78 | 83 |
15 | 23 |
풀이
규칙을 발견해서 풀 수 있지만 가장 쉬운 풀이는 n+1부터 이진법으로 표현했을 때의 1의 개수가 같은 수를 반환하는 것입니다.
Integer의 메서드 중에 이진법으로 변환했을 때 1의 개수를 카운팅 하는 .bitCount(n)이라는 메서드를 활용하면 매우 간단하게 풀 수 있습니다. 또는 직접 구현해도 쉽게 풀 수 있습니다.
코드
class Solution {
public int solution(int n) {
int cnt = Integer.bitCount(n);
int answer = n + 1;
while (Integer.bitCount(answer) != cnt) {
answer++;
}
return answer;
}
}
'개발 > Algorithm' 카테고리의 다른 글
[Java] 오픈채팅방 (2019 KAKAO BLIND RECRUITMENT) (0) | 2023.06.30 |
---|---|
[Java] 영어 끝말잇기 (프로그래머스 Summer/Winter Coding(~2018)) (0) | 2023.06.26 |
[Java] 성격 유형 검사하기 (2022 KAKAO TECH INTERNSHIP) (0) | 2023.06.26 |
[Java] 크레인 인형뽑기 게임 (2019 카카오 개발자 겨울 인턴십) (0) | 2023.06.26 |
[Java] 백준 2178번: 미로 탐색 (0) | 2023.01.05 |