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

홈런볼·2023년 8월 1일

프로그래머스

목록 보기
22/36

문제링크

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 이하의 자연수 입니다.

입출력

nresult
7883
1523

문제 접근

자료구조는 고려안해도 될 것 같고, 단순 구현문제이다. 문제에서 언급한 그대로 숫자의 2진수 변환값의 1의 갯수를 체크하고, 1의 갯수가 같아질때의 숫자를 return 한다.

로직

  1. n를 2진수로 변환한 뒤 1의 갯수를 체크
  2. n보다 1 큰수 부터 반복문을 돌면서 n의 갯수가 같아질때를 찾는다
  3. n의 갯수가 같아질 때 break로 빠져나와 n보다 큰 수를 찾는다

코드

class Solution {
  public int cnt(int n) {
	int cnt=0;
	while(n>0) {
		if(n%2==1) cnt++;
		n=n/2;
	}
	return cnt;
  }
  public int solution(int n) {
      int answer = 0;
	  int f_cnt=cnt(n);
	  for(int i=n+1;;i++) {
		 if(cnt(i)==f_cnt) {
			 answer=i;
			 break;
		 }
	 }
	return answer;
  }
}

정확성 테스트

1개의 댓글

comment-user-thumbnail
2023년 8월 1일

유익한 글이었습니다.

답글 달기