Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Stack
- Tree
- Data Structure
- 코딩테스트
- sorting
- hash table
- dynamic programming
- Binary Tree
- geometry
- Binary Search
- 파이썬
- implement
- two pointers
- Matrix
- SQL
- 자바
- 코테
- Method
- Number Theory
- database
- Math
- 구현
- bit manipulation
- java
- Counting
- simulation
- Class
- greedy
- array
- string
Archives
- Today
- Total
코린이의 소소한 공부노트
[프로그래머스/Lv.2] 다음 큰 숫자 본문
1. Input
1) 자연수 n
2. Output
1) n의 다음 큰 숫자
2) 다음 큰 숫자의 정의
조건 1. n의 다음 큰 숫자는 n보다 큰 자연수
조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 개수가 같다.
조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수
3. Constraint
1) n은 1,000,000 이하의 자연수
4. Example
Input: n=15 -> Output: 23
설명:
- 15는 2진수로 1111이다. 15보다 큰 자연수들 중 2진수로 변환했을 때 1의 개수가 처음으로 4개인 수를 반환해야 한다.
16 = 10000 17 = 10001 18 = 10010 19 = 10011 20 = 10100 21 = 10101 22 = 10110 23 = 10111
이므로 23을 반환한다.
5. Code
1) 첫 코드(2022/11/29)
int answer = 0;
String s1 = Integer.toBinaryString(n).replaceAll("0","");
while(true){
String s2 = Integer.toBinaryString(++n).replaceAll("0","");
if(s1.length()==s2.length()){
answer = n; break;
}
}
return answer;
- 정확성은 만점이었지만, 효율성에서 0점이었음
2) String 연산을 int 연산으로 바꾼 코드(2022/11/29)
int answer = 0, n1 = n, c1 = 0;
while(n1>0){
c1 += n1%2; n1 /= 2;
}
while(true){
int n2 = ++n, c2 = 0;
while(n2>0){
c2 += n2%2; n2 /= 2;
}
if(c1==c2){
answer = n; break;
}
}
return answer;
- 속도도 훨씬 빨랐고, 효율성에서도 만점이 나옴
* Integer.bitCount(n) 메서드는 n이 2진수일때 1의 개수를 세어주는 메서드
'코딩테스트 풀이 > JAVA' 카테고리의 다른 글
[프로그래머스/Lv.2] 영어 끝말잇기 (0) | 2022.11.29 |
---|---|
[프로그래머스/Lv.2] 카펫 (0) | 2022.11.29 |
[프로그래머스/Lv.2] 이진 변환 반복하기 (0) | 2022.11.28 |
[프로그래머스/Lv.1] 폰켓몬 (0) | 2022.11.26 |
[프로그래머스/Lv.1] 2016년 (0) | 2022.11.26 |