본문 바로가기
알고리즘/Java

[프로그래머스 ] Java - 다음 큰 숫자

by 조이은 2023. 4. 16.

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분만에 풀었음.... 

역시 문제가 잘 안 풀린다면 리프레시 하고 다시 풀어보는 것도 하나의 방법인 것 같다.

단순한 문제였음! 단순하게 생각하기..