본문 바로가기
문제풀이/Programmers 문제풀이

[ 알고리즘 ] 코딩 - Programmers - 다음 큰 숫자.java

by 마늘아빠 2021. 1. 28.
728x90
반응형

문제 링크

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

 

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

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

programmers.co.kr


* 프로그래머스 - Level 2 - (자바) 다음 큰 숫자

- Integer.toBinaryString(n) 함수 이용하기 / 규칙 찾기

 

조건
제한
입출력예시


< 로직 >

* Integer에 이진 변환이 되는 함수가 있는지 몰라서 꾸역꾸역 스택으로 만들었었다

* 그리고 혹시나 하는 마음에 찾아보니.. Integer.toBinaryString(n);라는 함수를 알게 되었다!

* 경우가 별로 없어서 모든 경우를 다 따져서 코드를 짜려고 했는데

* 짜다 보니 그냥 단순 1의 개수 파악만 하면 되는 것을 깨달았다

 

* 현재 들어온 n 숫자의 1의 개수를 센다.

* n보다 큰 수들 중n과 1의 개수가 같은 수가 나올 때까지 반복 


class Solution {
	    public int solution(int n) {
	    	// 10진수 이진변환해서 스트링으로 넘겨줌
	    	String b_num = Integer.toBinaryString(n);
	    	int onecnt = 0; 
	    	
	    	// 현재 n의 1의 개수를 카운트
	    	for(char binary : b_num.toCharArray()) {
	    		if(binary == '1') {
	    			onecnt++;
	    		}
	    	}
	    	
	    	int answer = 0;
	    	
	    	// n보다 큰 수 중 1의 수가 같은 수를 찾는다
	    	for(int next = n+1; next <= 10000000; next++) {
	    		int next_one_cnt = 0;
	    		String next_binary = Integer.toBinaryString(next);
	    		for(char binary : next_binary.toCharArray()) {
		    		if(binary == '1') {
		    			next_one_cnt++;
		    		}
		    	}
	    		if(onecnt == next_one_cnt) {
	    			answer = next;
	    			break;
	    		}
	    	}
	    	
	    	return answer;
	    }
	}
반응형