문제 설명



핵심
대놓고 비트 연산을 다룰 수 있는지 묻는 문제
예시 입력 중 하나로 "4 47"이 있다.
47은 이진법으로 101111이므로 첫 4개의 비트가 1이 된다.
이를 계산식으로 확인하는 방법
해당 수가 15(이진수 1111)와 AND 연산(두 수의 같은 위치의 비트가 모두 1이면 1)을 했을 때, 15가 나오면 첫 4개의 비트가 모두 1임을 알 수 있다.
앞 N개의 비트가 1인 이진수를 구하는 방법
먼저 쉬프트 연산에 대해 알아야한다. 0001을 왼쪽 쉬프트 연산하면 0010이다.
(자바에서) a << b : a를 b번 왼쪽 쉬프트 연산한 것
1. 1을 n만큼 좌측 쉬프트 연산한다. // 1 << 4 = 이진수10000
2. 1을 뺀다. // 이진수10000 - 1 = 01111
AND 연산하는 법
& 연산자를 통해 각 비트에 대한 논리 연산을 수행할 수 있다.
구현
Code (Java)
package swea10726;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Solution {
public static void main(String[] args) throws Exception {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T;
T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int num = (1 << n) - 1;
String ret = "ON";
if ((m & num) != num) {
ret = "OFF";
}
sb.append('#').append(tc).append(' ').append(ret).append('\n');
}
System.out.println(sb);
}
}728x90
반응형
'CS > APS' 카테고리의 다른 글
| [Baekjoon Online Judge] 1043. 거짓말 // 해설 (Java) (0) | 2024.09.25 |
|---|---|
| [Baekjoon Online Judge] 4195. 친구 네트워크 // 해설 (Java) (0) | 2024.09.24 |
| [Baekjoon Online Judge] 12865. 평범한 배낭 (Java) (0) | 2024.07.30 |
| [Baekjoon Online Judge] 2839. 설탕 배달 (C++, Java) (0) | 2024.07.29 |
| [Baekjoon Online Judge] 11286. 절댓값 힙 (C++, Java) (0) | 2024.07.24 |