갓생사는 김초원의 개발 블로그
chocho_log
갓생사는 김초원의 개발 블로그
전체 방문자
오늘
어제
  • 분류 전체보기 (78)
    • 개발 (23)
      • Spring (4)
      • Java (4)
      • Database (2)
      • Elasticsearch (3)
      • ETC (3)
      • JPA (3)
      • 이슈 (1)
    • 코딩 테스트 (43)
      • 프로그래머스 (23)
      • 백준 (12)
      • TIP (8)
    • 자료구조 (2)
    • 알고리즘 (4)
    • 잡생각 (0)
    • 경험 (5)
      • AWS re:Invent 2024 (5)

블로그 메뉴

    공지사항

    인기 글

    태그

    • 디자인패턴 #SOLID 원칙
    • war
    • Lazy Loading
    • Spring Boot Embedded Tomcat
    • 지연로딩
    • jar
    • querydsl
    • jpa

    최근 댓글

    최근 글

    갓생사는 김초원의 개발 블로그

    chocho_log

    [Level2] 다음 큰 숫자
    코딩 테스트/프로그래머스

    [Level2] 다음 큰 숫자

    2020. 10. 10. 23:49

    [문제 설명]

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

     

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

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

    programmers.co.kr

    [풀이 과정]

    JAVA의 Integer 클래스에는 이진수 관련 메소드들을 제공한다.

     

    1. Integer.toBinaryString( int );

    - 10진수 -> 2진수로 변환하고 싶을 때 사용한다. 

    public class Test12 {
        public static void main(String[] args) {
           int n = 78;
    
           String binary = Integer.toBinaryString(n);
           System.out.println(binary);
        }
    }
    
    // 1001110

      

    2. Integer.bitCount( int );

    - 10진수 숫자를 2진수로 변환했을 때 1bit의 개수를 반환한다. 

    public static void main(String[] args) {
           int n = 78;
    
           String binary = Integer.toBinaryString(n);
           System.out.println(binary);
    
           int one_count = Integer.bitCount(n);
           System.out.println(one_count);
        }
        
     // 1001110
        4
    

    위 메소드들의 존재를 몰랐을 때는 10진수 -> 2진수 변환 메소드와 1비트 개수를 세는 로직도 직접 구현했다. 

    그렇게 하니 정확도 검사는 모두 맞았지만 효율성 검사를 통과하지 못했다. 

     

    위 메소드를 사용하니 효율성 검사도 모두 통과.  

     

    [JAVA 코드]

    package com.algorithm.level2;
    
    public class Test16 {
        public static void main(String[] args) {
            int n = 78;
            System.out.println(solution(n));
        }
    
        public static int solution(int n) {
            // 숫자 n을 이진수로 변환했을 때 1의 개수 
            int one_count = Integer.bitCount(n);
            
            int answer_count = 0;
            while (one_count != answer_count) {
                // n보다 큰 숫자들을 하나씩 순회 
                n++;
                answer_count = Integer.bitCount(n);
            }
            return n;
        }
    
    }
    

    '코딩 테스트 > 프로그래머스' 카테고리의 다른 글

    [프로그래머스][Level2] 압축 - JAVA  (0) 2020.11.20
    [프로그래머스][Level2][JAVA] 영어 끝말잇기  (0) 2020.11.07
    [프로그래머스][Level2][JAVA] 수식 최대화  (0) 2020.10.24
    [프로그래머스] [Level2] [JAVA] 행렬의 곱셈  (0) 2020.10.18
    [Level2] 피보나치 수  (0) 2020.10.12
      '코딩 테스트/프로그래머스' 카테고리의 다른 글
      • [프로그래머스][Level2][JAVA] 영어 끝말잇기
      • [프로그래머스][Level2][JAVA] 수식 최대화
      • [프로그래머스] [Level2] [JAVA] 행렬의 곱셈
      • [Level2] 피보나치 수
      갓생사는 김초원의 개발 블로그
      갓생사는 김초원의 개발 블로그
      갓생사는 김초원의 개발 블로그 github: https://github.com/kimchowon

      티스토리툴바