[프로그래머스] LEVEL2 2개 이하로 다른 비트 JAVA

Pixel Dophin·2023년 8월 30일
0

프로그래머스

목록 보기
46/55

2개 이하로 다른 비트

문제링크

풀이

  1. 짝수의 경우에는 2진수의 마지막 자리가 1인 되는 경우, 즉 짝수보다 1큰 홀수가 된는 경우가 정답이다.
  2. 홀수의 경우에는 뒤에서 부터 가장 가까운 곳에 있는 0을 찾아 1로 바꾸고 뒤의 1을 0으로 변경하면 2개 이하로 다른 비트의 숫자를 찾을 수 있다.

위의 풀이는 다른 풀이를 참조하여 풀었다..ㅠㅠ

원래는 아래의 코드 처럼 XOR과 bitCount를 활용해서 문제를 풀었는데 초반에는 괜찮았으나, 10,11 테스트 케이스에서 시간 초과가 났다. 1씩 증가하여 모든 과정을 조회하는 과정을 거쳐서 그런 듯하다.

코드

class Solution {
    public long[] solution(long[] numbers) {
        long[] answer = new long[numbers.length];
        
        for (int i = 0; i < numbers.length; i++) {
            long num = numbers[i];
            if (num % 2 == 0) {
                answer[i] = num + 1;
            } else {
                String numStr = "0" + Long.toBinaryString(num);
                int lastZeroIdx = numStr.lastIndexOf("0");
                String newStr = numStr.substring(0, lastZeroIdx) + "10" + numStr.substring(lastZeroIdx + 2);
                answer[i] = Long.parseLong(newStr, 2);
            }
        }
        return answer;
    }
}
  • 처음에 작성한 코드 (시간 초과)
class Solution {
    public long[] solution(long[] numbers) {
        long[] answer = new long[numbers.length];
        
        for (int i = 0; i < numbers.length; i++) {
            long a = numbers[i];
            long b = a;
            
            while(true) {
                long result = a ^ ++b;
                if (Long.bitCount(result) <= 2) {
                    answer[i] = b;
                    break;
                }
                
            }
        }
        return answer;
    }
}
profile
안녕 👋 성장하고픈 개발자 💻 입니다

0개의 댓글

관련 채용 정보