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
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[JAVA][Programmers] 멀리 뛰기 ⭐️ (0) | 2025.03.12 |
---|---|
[SQL][Programmers] 동물의 아이디와 이름 (0) | 2025.03.11 |
[SQL][Programmers] 동물의 아이디와 이름 (1) | 2025.03.04 |
[SQL][Programmers] 여러 기준으로 정렬하기 (0) | 2025.03.04 |
[SQL][Programmers] 가장 비싼 상품 구하기 (0) | 2025.03.04 |