[프로그래머스,Level 2] 다음 큰 숫자 (JAVA 구현)

2021. 1. 25. 11:52·CodingTest/프로그래머스(Programmers)
반응형

- 첫 풀이 및 정답풀이

  이 문제를 읽은 후, 바로 Integer.toBinaryString() 메서드를 활용해야겠다는 생각이 들었고 바로 정답 처리를 받을 수 있었다. 로직은 간단하다.

 

  1. 입력된 n을 2진수로 변환한다.

  2. 변환된 2진수의 비트가 1인 개수를 카운팅한다.

  3. n+1부터 위 과정을 반복해 앞서 구한 개수와 일치하는 수를 찾는다.

 

class Solution {
    public int solution(int n) {
        
        int answer = 0;
        // 1. n을 2진수 변환.
        String str = Integer.toBinaryString(n);
        // 2. n의 1인 비트의 수를 저장하는 변수.
        int cnt =0;
        // 3. 1인 비트의 수를 카운팅.
        for(int i = 0;i<str.length();i++){
            if(str.charAt(i) == '1') cnt++;
        }
        // 4. n+1부터 반복.
        for(int i =n+1;i<1000000;i++){
            // 5. 위 과정을 반복.
            String temp = Integer.toBinaryString(i);
            int temp_cnt = 0;
            for(int j =0;j<temp.length();j++){
                if(temp.charAt(j) == '1') temp_cnt++;
            }
            // 6. 1인 비트의 수가 일치하면 해당 수를 담아 반복문 종료.
            if(temp_cnt == cnt) {
                answer = i;
                break;
            }
        }
        
        return answer;
    }
}

  더 나은 풀이가 없을까 하고 찾아보았더니 Integer.bitCount()라는 메소드가 존재했다. 이 메소드는 입력된 정수를 2진수로 변환한 뒤, 2진수에 포함된 1을 카운팅 해주는 메소드라고 한다. 이를 활용한 풀이는 아래이다.

class Solution {
    public int solution(int n) {
        int answer = 0;
        // 1. 입력받은 n의 1 개수를 저장.
        int n_cnt = Integer.bitCount(n);
        // 2. 증가하는 n의 1 개수를 저장 할 변수.
        int b_cnt = 0;
        // 3. 무한반복.
        while(true){
            // 4. n을 증가.
            n++;
            // 5. 증가된 n의 1 개수를 저장.
            b_cnt = Integer.bitCount(n);
            // 6. 일치하면, answer에 n을 담고 반복문을 빠져나온다.
            if(n_cnt == b_cnt){
                answer = n;
                break;
            }            
        }
                
        return answer;
    }
}
저작자표시 (새창열림)
'CodingTest/프로그래머스(Programmers)' 카테고리의 다른 글
  • [프로그래머스,Level 2] 숫자의 표현 (JAVA 구현)
  • [프로그래머스,Level 2] 땅따먹기 (JAVA 구현)
  • [프로그래머스,Level 2] 올바른 괄호 (JAVA 구현)
  • [프로그래머스,Level 2] 가장 큰 정사각형 찾기 (JAVA 구현)
뜸부깅
뜸부깅
코딩에 대한 여러 개인적인 생각을 정리하고 공부를 하는 공간입니다!!
  • 뜸부깅
    코오오딩
    뜸부깅
  • 전체
    오늘
    어제
    • Note (429)
      • Skill (31)
        • Java & Spring (9)
        • Javascript & HTML & CSS (0)
        • React (0)
        • Next.js (22)
      • CodingTest (389)
        • 백준 온라인 저지(BOJ) (140)
        • 프로그래머스(Programmers) (79)
        • LeetCode (170)
      • Algorithm & Data Structure (6)
      • [Project] 포트폴리오 (3)
        • Front end (3)
        • Back end (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    자바
    백준1260
    Easy
    백준7576자바
    Java
    백준7576
    next 14
    BOJ
    백준1427
    백준2751
    boj2108
    프로그래머스
    boj1427
    leetcode 2236
    component-scan
    meidum
    TypeScript
    medium
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뜸부깅
[프로그래머스,Level 2] 다음 큰 숫자 (JAVA 구현)
상단으로

티스토리툴바