본문 바로가기

HackerRank

[해커랭크] Day 6: Bitwise Operators (javascript)

비트연산자 & 를 이용하여 주어진 값보다 작은 최대 값 구하기

조건

  • 1부터 n까지의 정수를 가지는 시퀀스 S 정의
  • S에서 임의의 두 정수 a, b의 비트값이 k 보다 작은 최대 비트값 얻기(단, a < b)

 

제한사항

  • 1 ≤ q ≤ 10³
  • 2 ≤ n ≤ 10³
  • 2 ≤ k ≤ n

 

나의 풀이

  • 최종적으로 전달할 max 값을 기본 0으로 지정
  • 이중 for 문을 이용하여 시퀀스를 순환하여 비트연산 수행
    • a < b 이므로
      • a에 담기는 범위는 1 ~ (n-1)
      • b에 담기는 범위는 a+1 ~ n
    • a & b 를 이용하여 비트연산자 수행
    • 수행된 결과와 숫자값인 k 값을 비교
      • Number(a&b) < k
    • a&b < k 인 값 중 최댓값을 담아 리턴
      • Math.max() 를 사용했으나, if 문을통해서도 구현 가능
        • if 문이 훨씬 효율적일 수도 ?
// 생략

function getMaxLessThanK(n , k) {
    let max = 0;
    
    for(var a = 1; a < n; a++) {
        for (var b = a+1; b <= n; b++) {
        
            if ((a & b) < k) {
                max = Math.max(max, (a&b))
            }
        }
    }
    
    return max;
}

//후략

결과