been_dev
been_archive
been_dev
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • f-lab (3)
    • project (2)
    • solve (29)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 해시
  • 자바
  • Lombok
  • 에프랩 2개월 후기
  • f-lab 2개월 후기
  • 에프랩
  • Downloading from external resources is disabled
  • 버튼미노출
  • 프로그래머스
  • 실행창 작음
  • 그리디
  • Eclipse
  • specify location
  • JWT
  • 큐
  • f-lab
  • f-lab 1개월 후기
  • 코딩테스트
  • 후기
  • 자바 백엔드
  • 탐욕법
  • 완전탐색
  • jadencase만들기
  • 에프랩 1개월 후기
  • 숫자의표현
  • 이진변환반복하기
  • MYSQL
  • 문자열
  • 백준
  • 스택

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
been_dev

been_archive

solve

[프로그래머스] Lv2. 다음 큰 숫자

2024. 11. 4. 20:01

https://school.programmers.co.kr/learn/courses/30/lessons/12911

 

[문제 설명]

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.

조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.

자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.

 

[제한 사항]

n은 1,000,000 이하의 자연수 입니다.


 [입출력 예]

n result
78    83
15    23

 

풀이(실패)

테스트 케이스는 통과하는데 효율성 테스트에서 올킬 당했다..

class Solution {
    public int solution(int n) {
        int answer = 0;

        int count = countOneInString(changeToBinary(n));

        while (true) {
            n++;
            if(count == countOneInString(changeToBinary(n))) {
                answer = n;
                break;
            };
        }
        return answer;
    }
    
     private String changeToBinary(int n) {
        StringBuilder sb = new StringBuilder();

        while(n>1) {
            sb.insert(0, n % 2);
            n = n / 2;
        }

        return sb.toString();
    }

    private int countOneInString(String s) {
        int answer = 0;
        String[] strArr = s.split("");
        for(String str : strArr) {
            if(str.equals("1")) {
                answer++;
            }
        }
        return answer;
    }
    
    
}

 

 

 

비트 연산자를 활용하는 방법도 있고,

새롭게 알게된 함수 Integer.bitCount(number) 를 이용해서 비트의 1 개수를 셀 수 있다. 허무핑..

 

함수 활용

public int solution(int n) {
    int countOfOnes = Integer.bitCount(n); // n의 1의 개수
    int answer = n + 1;

    // 1의 개수가 동일한 숫자를 찾을 때까지 반복
    while (Integer.bitCount(answer) != countOfOnes) {
        answer++;
    }

    return answer;
   }

 

'solve' 카테고리의 다른 글

[프로그래머스] Lv.2 짝지어 제거하기  (0) 2024.11.07
[프로그래머스] Lv2.피보나치 수  (0) 2024.11.05
[프로그래머스] Lv2.숫자의 표현  (0) 2024.11.04
[프로그래머스] Lv2.이진 변환 반복하기  (0) 2024.11.01
[프로그래머스] Lv2.JadenCase 만들기 (문자열)  (0) 2024.10.30
    'solve' 카테고리의 다른 글
    • [프로그래머스] Lv.2 짝지어 제거하기
    • [프로그래머스] Lv2.피보나치 수
    • [프로그래머스] Lv2.숫자의 표현
    • [프로그래머스] Lv2.이진 변환 반복하기
    been_dev
    been_dev

    티스토리툴바