▼ Why ? What ?
이번 1일 1알고리즘 문제로는 "다음 큰 숫자"라는 문제를 풀게 되었다. 2진수 변환하는 방법을 안다면 쉽게 풀 수 있는 문제들이었고, 매우 간결하게 푼 코드들이 있길래 그중에 가독성도 가장 좋고 속도도 빠른 코드를 추가로 정리해봤다. (비트
▼ 알고리즘 문제 : "다음 큰 숫자"
다음 큰 숫자
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[ 나의 해결 코드 ]
- `Integer.toBinaryString()`을 활용해 n보다 큰 수들 중 첫 번째로 `1`의 개수가 같은 수를 찾는 단순한 로직이다.
➙ 완전 탐색 기법이어도 사실상 n보다 큰 수 중 가장 작은 값을 찾으면 되기 때문에, 최악의 경우를 고려하더라도 사실상 효율성 검사에서 문제가 생길 만큼 반복 로직이 수행될 일이 없다.
class Solution {
public int solution(int n) {
int answer = 0;
boolean flag = true;
int oneCnt = 0;
String s = Integer.toBinaryString(n);
for (char c : s.toCharArray()) {
if (c == '1') {
oneCnt++;
}
}
while (flag) {
String tmp = Integer.toBinaryString(++n);
int tmpCnt = 0;
for (char c : tmp.toCharArray()) {
if (c == '1') {
tmpCnt++;
}
}
if (tmpCnt == oneCnt) {
flag = false;
answer = n;
}
}
return answer;
}
}
[ 다른 사람의 해결 코드 ]
- `Integer.bitCount()`를 활용하면 더 간결하게 해결할 수 있는데, 아래 코드는 while문의 조건부에 직접 로직을 넣음으로써 더 간결한 코드를 작성한 것이 인상깊었다.
class Solution {
public int solution(int n) {
int a = Integer.bitCount(n);
while (Integer.bitCount(++n) != a) {}
return n;
}
}
▼ Why ? What ?
이번 1일 1알고리즘 문제로는 "다음 큰 숫자"라는 문제를 풀게 되었다. 2진수 변환하는 방법을 안다면 쉽게 풀 수 있는 문제들이었고, 매우 간결하게 푼 코드들이 있길래 그중에 가독성도 가장 좋고 속도도 빠른 코드를 추가로 정리해봤다. (비트
▼ 알고리즘 문제 : "다음 큰 숫자"
다음 큰 숫자
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[ 나의 해결 코드 ]
- `Integer.toBinaryString()`을 활용해 n보다 큰 수들 중 첫 번째로 `1`의 개수가 같은 수를 찾는 단순한 로직이다.
➙ 완전 탐색 기법이어도 사실상 n보다 큰 수 중 가장 작은 값을 찾으면 되기 때문에, 최악의 경우를 고려하더라도 사실상 효율성 검사에서 문제가 생길 만큼 반복 로직이 수행될 일이 없다.
class Solution {
public int solution(int n) {
int answer = 0;
boolean flag = true;
int oneCnt = 0;
String s = Integer.toBinaryString(n);
for (char c : s.toCharArray()) {
if (c == '1') {
oneCnt++;
}
}
while (flag) {
String tmp = Integer.toBinaryString(++n);
int tmpCnt = 0;
for (char c : tmp.toCharArray()) {
if (c == '1') {
tmpCnt++;
}
}
if (tmpCnt == oneCnt) {
flag = false;
answer = n;
}
}
return answer;
}
}
[ 다른 사람의 해결 코드 ]
- `Integer.bitCount()`를 활용하면 더 간결하게 해결할 수 있는데, 아래 코드는 while문의 조건부에 직접 로직을 넣음으로써 더 간결한 코드를 작성한 것이 인상깊었다.
class Solution {
public int solution(int n) {
int a = Integer.bitCount(n);
while (Integer.bitCount(++n) != a) {}
return n;
}
}