다희의 코딩 성장일기

[프로그래머스] level2. 다음 큰 숫자 (자바 JAVA) 본문

Algorithm/프로그래머스

[프로그래머스] level2. 다음 큰 숫자 (자바 JAVA)

ilmiodiario 2021. 8. 25. 11:42

[ 문제 ]  [프로그래머스] level2. 다음 큰 숫자 (자바 JAVA)

 

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12911

 

코딩테스트 연습 - 다음 큰 숫자

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니

programmers.co.kr


# 접근 방법 및 풀이 

 

  • 문제에 주어진 대로 그대로 풀었다. 내가 처음에 푼 풀이는 첫번째 풀이인데, 다른사람 풀이 보니까 새로운 내장함수를 발견했다.
  • 역시 자바는 최고다.. 그건 바로 Integer.bitCount()라는 메소드다.
  • bitCount(num) num을 넣으면 binary로 변환후, 1의 개수를 반환한다!
  • 따로 1의 개수를 for문으로 세주었는데 그럴 필요가 없어졌다! 충격,, 
  • 아무튼 프로그래머스 문제 풀다보면 새로운 내장함수들을 많이 알게되서 좋다.

# 주의할 점 

 

  • 딱히 없음

 

JAVA 코드

첫번째 풀이

class Solution {
    public int solution(int n) {
        int answer = n+1;
        String s = Integer.toString(n, 2);
        int cnt = 0;
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) == '1')
                cnt++;
        }
        while(true){
            int cnt2 = 0;
            String ss = Integer.toString(answer, 2);
            for(int i = 0; i < ss.length(); i++){
                if(ss.charAt(i) == '1')
                     cnt2++;
            }
            if(cnt == cnt2)
                break;
            answer++;
        }
        return answer;
    }
}

두번째 풀이

class Solution {
    public int solution(int n) {
        int answer = n+1;
        int cnt = Integer.bitCount(n); // n -> bit -> 1의 숫자를 세줌
        while(true){
            if(cnt == Integer.bitCount(answer))
                break;
            answer++;
        }
        return answer;
    }
}

 

 

REVIEW

Comments