2019년 5월 23일 목요일

Hackerrank Day 29 Bitwise AND







알고리즘 연습 사이트


Day 29:Bitwise AND



 Java D-Day 마지막 주제는 비트 연산에 대한 것이다.







* & Bitwise AND (∧)
둘 다 1이어야지 1, 둘 중 하나라도 0이라면 0이다.

* | Bitwise inclusive OR (∨)
둘 중 하나만 1이어도 1이다.

* ^ Bitwise Exclusive OR or XOR
두 개가 동일하다면 0, 두개가 다르다면 1이다.

* ~ NOT 
1이면 0으로, 0이면 1로 뒤집는 반대 연산자이다.

비트 연산자 마지막 문제는 두개의 숫자가 입력값으로 주어진다. $(N,K)$ 
집합 $S$ 의 요소들은 1~N까지이다. 
집합의 요소들끼리 & 연산을 했을 때 가장 큰 수가 나오는 것을 찾는 것이다. 다만 K보다는 작아야 한다.

K보다 작은 max 값을 찾는 부분만 주의하면 된다.


public class Solution {
    
    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        int t = scanner.nextInt();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        for (int tItr = 0; tItr < t; tItr++) {
            String[] nk = scanner.nextLine().split(" ");

            int n = Integer.parseInt(nk[0]);

            int k = Integer.parseInt(nk[1]);
            int max =0; 
            for(int i = 1 ; i <=n ; i++){
                for(int j=i+1 ; j <= n ; j++){
                    if((i&j)< k && (i&j)>max) {
                        max = i&j;
                    }
                }
            }
            System.out.println(max);
        }

        scanner.close();
    }
}


여기까지 D-Day 30 Java 튜토리얼을 완료하였다. :) 
다음은 Java 를 시작할 예정이다.





댓글 없음:

댓글 쓰기