일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- HashMap
- 새벽코딩
- Java
- SQL
- 알고리즘
- 그리디
- 시뮬레이션
- 문자열
- BFS
- 브루트포스
- dfs
- 완전탐색
- LIS
- Stack
- 다리 만들기
- BufferedReader
- 프로그래머스
- DP
- 탐색
- 백트래킹
- 스택
- 구현
- Queue
- 배열
- 다이나믹프로그래밍
- 백준
- Python
- 아스키코드
- oracle
- 빅데이터
Archives
- Today
- Total
새벽코딩
[프로그래머스] 다음 큰 숫자 (JAVA) (level2) 본문
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12911
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
자연수 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 이하의 자연수 입니다.
※ JAVA 코드 (다음 큰 숫자)
class Solution {
public int solution(int n) {
int answer = 0;
boolean chk = false;
int val = 0;
int tmp = 0;
while(true){
if(chk == true) break;
int cnt = 0;
tmp = n;
while(true){
if(tmp <= 0) {
break;
}
if(tmp % 2 == 1){
cnt++;
}
tmp /= 2;
}
if(val == cnt) {
answer = n;
break;
}
if(val == 0) val = cnt;
n++;
}
return answer;
}
}
※ 생각정리 (다음 큰 숫자)
1. 기준이 되는 숫자 n에서 1씩 증가하는 이진수를 구하여 해당 이진수에 있는 1의 숫자를 센다.
2. n에 있는 1의 개수와 증가된 수의 이진수 1의 개수가 같다면 해당 수를 asnwer에 담고 반복문을 종료한다.
-새벽코딩-
반응형
Comments