Coding Test/Programmers
[JAVA][Programmers] 다음 큰 숫자⭐️⭐️
예롱메롱
2025. 3. 8. 15:23
728x90
반응형
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📌 접근 방식
- n을 2진수로 변환하고 1의 개수를 구합니다.
- n을 1씩 증가시키면서 1의 개수가 같은지 확인합니다.
- 최소한의 연산으로 Integer.toBinaryString()과 countOnes() 함수를 활용하여 해결합니다.
✅ PASS CODE
class Solution {
public int solution(int n) {
int count = countOnes(binary(n)); // 현재 n의 1의 개수
while(countOnes(binary(++n)) != count); // 1의 개수가 같을 때까지 증가
return n;
}
// 2진수 변환 함수
public String binary(int n) {
return Integer.toBinaryString(n);
}
// 1의 개수 세는 함수
public int countOnes(String str) {
int cnt = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '1') {
cnt++;
}
}
return cnt;
}
}
💡 코드 설명
🔹 binary(n)
- Integer.toBinaryString(n)을 사용하여 정수를 2진수 문자열로 변환합니다.
🔹 countOnes(str)
- 2진수 문자열을 순회하며 '1'의 개수를 센 후 반환합니다.
🔹 solution(n)
- n의 1의 개수를 구합니다.
- n을 1씩 증가시키며 1의 개수가 같아질 때까지 반복합니다.
- 조건을 만족하는 가장 작은 n을 반환합니다.
🔥 최적화 코드
Integer.bitCount() 활용
class Solution {
public int solution(int n) {
int count = Integer.bitCount(n); // 현재 n의 1 개수
while (Integer.bitCount(++n) != count); // 1 개수가 같을 때까지 증가
return n;
}
}
✅ 개선된 점
- binary() 및 countOnes() 함수 제거 → 코드가 더 짧고 직관적
- Integer.bitCount(n) → 1의 개수를 더 빠르게 계산
- 최대 1,000,000까지 가능하므로 시간 복잡도 최적화
😊 느낀 점
처음에는 직접 2진수를 구하려 했지만, Integer.toBinaryString(n) 을 사용하니 훨씬 간결해졌습니다. Integer.bitCount(n)을 사용하면 더 효율적으로 1의 개수를 셀 수 있다는 것도 알게되었습니다.

728x90
반응형