https://school.programmers.co.kr/learn/courses/30/lessons/12911
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Level 2. 다음 큰 숫자
접근 방식
n보다 큰 숫자부터 반복문을 돌면서 1의 개수가 같아지는 숫자를 확인하면, 그때 해당 값을 return한다.
처음 코드
class Solution {
public int solution(int n) {
int answer = 0;
String digit = Integer.toBinaryString(n);
System.out.println(digit);
int num = digit.length() - digit.replace("1", "").length(); //1의 개수
// 0의 개수는 digit.replace("1","").length();
if(digit.contains("0")==false) { //문자열에 0이 없으면
//맨처음 1을 왼쪽으로 한칸 밀고, 그 자리 0으로
answer = (int) Math.pow(2, digit.length());
for(int i = num-2; i>=0; i--) {
answer += (int)Math.pow(2, i);
}
System.out.println(answer);
}
else {
// digit = digit.substring(0,digit.indexOf("01")) + "10" + digit.substring(n)
}
return answer;
}
}
처음에 이런식으로 하고 있었다.. 아무리 생각해봐도 이렇게까지 푸는 문제가 아닌 것 같은데 싶어서, 그냥 싹 다 밀고 내일 풀자 생각해서 내일 다시 풀어봄.
최종 코드
class Solution {
public int solution(int n) {
int answer = 0;
for(int i=n+1; ; i++){
if(Integer.bitCount(i)==Integer.bitCount(n)){
answer = i;
break;
}
}
return answer;
}
}
고찰
언제 어디선가 bit 개수 세아리는 메소드가 있었던게 생각났다. 그걸 깨닫고 나니까 진짜 진짜 쉽게 풀리는 문제였다. 2분만에 풀었음....
역시 문제가 잘 안 풀린다면 리프레시 하고 다시 풀어보는 것도 하나의 방법인 것 같다.
단순한 문제였음! 단순하게 생각하기..
'알고리즘 > Java' 카테고리의 다른 글
[프로그래머스] Java - 영어 끝말잇기 (0) | 2023.04.25 |
---|---|
[프로그래머스] - 피보나치 수 (0) | 2023.04.25 |
[프로그래머스] Java - 숫자의 표현 (0) | 2023.04.16 |
[프로그래머스] Java - 이진 변환 반복하기 (0) | 2023.04.09 |
[프로그래머스] Java - 올바른 괄호 (0) | 2023.04.08 |