개인공부-12

박상훈·2023년 6월 7일
0

개인공부

목록 보기
12/16

1. 다음 큰 숫자(이진문제)

  • 프로그래머스 Level 2 정답률 70%넘는 기본 문제
  • 문제 설명
    1) 78 -> ( 이진변환 ) 1001110
    2) 1의 갯수가 같으면서 이 다음으로 큰 자연수의 최소 값을 구하는 문제
    3) 83 -> ( 이진변환 ) 1010011
    4) 1의 갯수가 같으면서 다음으로 큰 자연수 중 가장 최소 값임.

2. 처음 풀이 접근

  • 그냥 간단하게 자연수를 이진 변환 해주는 Intger.toBinaryString()을 사용
public class Solution8 {

    public static int solution(int n) {

        String nB = Integer.toBinaryString(n);
        int nBCount = 0;
        int plus = 1;

        for(int i = 0 ; i < nB.length(); i++){
            if(nB.charAt(i)=='1') nBCount++;
        }

        while(true){
            int plusCount = 0 ;
            String nBPlus = Integer.toBinaryString(n + plus);
            for(int j = 0 ; j < nBPlus.length() ; j ++){
                if(nBPlus.charAt(j)=='1') plusCount++;
            }

            if(nBCount == plusCount) return n + plus;
            plus++;
        }


    }
 }
  • 자연수 N -> 이진수로 변환 -> 1의 갯수가 같을 때 return

3. 수정 풀이

  • 굳이 이진수로 변환하지 않고 Integer.bitCount()로 자연수의 이진수 1의 갯수를 셀 수 있음..!!
  • 그냥 변환 하는 부분을 Count의 갯수 비교로 바꿔주면 될듯.
  • 상위 풀이 중 비트 연산자를 보았는데, 오랜만에 보니 헷갈려서 다시 정리를 간단하게 해봄.

&, |, ^

  • & : 피연산자 둘다 1이여야 1의 결과를 얻을 수 있음 ( AND )
  • | : 피연산자 둘중 하나만 1이여도 1의 결과를 얻을 수 있음 ( OR )
  • ^ : 피연산자 둘중 하나만 1이여야 1의 결과를 얻을 수 있음 둘다 1이면 0 ( XOR )

비트연산

  • >> : 오른쪽으로 비트연산
  • << : 왼쪽으로 비트연산 ( 빈자리는 0으로 채워짐 )
int n = 2 << 2 // 10을 왼쪽으로 두칸이동 = 1000(8)
profile
기록하는 습관

0개의 댓글