시간초과 풀이
비트 논리 연산자와 bitCount() 활용한 풀이
public static void solution(long[] numbers) {
//비트 논리 연산(&, |, ^, ~), bitCount()활용
for(int i=0; i<numbers.length; i++) {
if(numbers[i]%2==1) {
//홀수인 경우
long originalNum = numbers[i];
while (true) {
if (Long.bitCount(originalNum^++numbers[i]) <= 2) break;
}//while end
} else {
//짝수인 경우
numbers[i]++;
}//if~else end
}//for end
}//solution() end
비트 연산자 사용법
https://coding-factory.tistory.com/521
다른 풀이
직접 규칙 찾아서 풀이
toBinaryString(), lastIndexOf() 활용
public static void solution2(long[] numbers) {
int length = numbers.length;
long[] answer = new long[numbers.length];
for(int i=0; i<length; i++) {
if(numbers[i]%2==0) {
//짝수
answer[i] = numbers[i]+1;
} else {
//홀수
String binStr = Long.toBinaryString(numbers[i]);
int zeroIdx = binStr.lastIndexOf("0");
if(zeroIdx!=-1) {
//이진수에서 0을 포함하는 경우
//가장 뒤에 있는 0을 1로 바꾼 후 그 다음 자리수의 1을 0으로 바꾼다.
binStr = binStr.substring(0,zeroIdx)+"10"+binStr.substring(zeroIdx+2);
} else {
//이진수에서 0 없는 경우
//앞에서 두번째 자리에 0 추가
binStr = "10"+binStr.substring(1);
}//if~else end
answer[i] = Long.parseLong(binStr, 2);
}//if~else end
}//for end
}//solution2() end
'자료구조 & 알고리즘 > 문제풀이' 카테고리의 다른 글
JadenCase 문자열 만들기 - 프로그래머스 (Java, Level 2) (0) | 2022.03.05 |
---|---|
피로도 - 프로그래머스 (Java, Level 2) (0) | 2022.03.02 |
모음 사전 - 프로그래머스 (Java, Level 2) (0) | 2022.02.25 |
최댓값과 최솟값 - 프로그래머스 (Java, Level 2) (0) | 2022.02.21 |
구명보트 - 프로그래머스 (Java, level 2) (0) | 2022.02.18 |
댓글