알고리즘 연습 사이트
Day 29:Bitwise AND
Java D-Day 마지막 주제는 비트 연산에 대한 것이다.
* 참고사이트
Truth_table : https://en.wikipedia.org/wiki/Truth_table
Java Operator : https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html
Truth_table : https://en.wikipedia.org/wiki/Truth_table
Java Operator : https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html
* & 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 를 시작할 예정이다.
댓글 없음:
댓글 쓰기