프로그래머스_다음 큰 숫자

LeeYulhee·2023년 9월 8일
0

💻 문제 출처 : 프로그래머스_다음 큰 숫자

👉 내가 작성한 답


class Solution {
    public int solution(int n) {
        
        int oneCounter = Integer.toBinaryString(n).replace("0", "").length();
        int findNum = n + 1;

        while(true) {
            int check = Integer.toBinaryString(findNum).replace("0", "").length();
            if(check == oneCounter) return findNum;
            findNum++;
        }
    }
}
  • 📌 접근 방식
    • n보다 큰 수를 전부 순회하며 이진수로 변환한 값의 1 개수가 n을 이진수로 변환한 값의 1 개수와 같은 걸 찾음
      • 문제는 같은 코드여도 시간 초과가 나기도 함
  • 📌 문제 풀이 설명
    • int 변수 oneCounter에 n을 이진수로 변환한 후 0을 “”로 대체한 String의 길이를 대입
    • int 변수 findNum에 n + 1을 대입
    • while문으로 계속 순회
      • int 변수 check에 findNum을 이진수로 변환한 후 0을 “”로 대체한 String의 길이를 대입
      • 만약 check와 oneCounter가 같다면 return findNum
      • findNum 1 증가



👉 다른 사람이 작성한 답


class Solution {
    public int solution(int n) {
        
        int a = Integer.bitCount(n);
        int compare = n+1;
        while(true) {
            if(Integer.bitCount(compare)==a)
                break;
            compare++;
        }
        return compare;
    }
}
  • 📌 접근 방식
    • 접근 방식은 내 풀이와 동일하지만 정규식 등을 통해 1의 개수를 확인하지 않고 Integer 클래스의 bitCount 메서드를 사용해서 확인
  • 📌 문제 풀이 설명
    • int 변수 a에 Integer 클래스의 bitCount 메서드에 n을 인수로 넣은 return 값을 대입
      • bitCount 메서드
        • 주어진 정수를 이진법으로 표현했을 때 1비트의 개수를 반환
    • int 변수 compare에 n + 1을 대입
    • while문으로 계속 순회
      • 만약 bitCount에 compare를 넣어 실행한 값이 a와 같다면
        • break로 while문 종료
      • compare 1 증가
    • while문 종료 후 return compare
profile
공부 중인 신입 백엔드 개발자입니다

0개의 댓글