import java.util.Scanner;
class Solution
{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int T;
T = sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
int N = sc.nextInt();
int M = sc.nextInt();
int X = (1 << N) - 1;
if ((M & X) == X) System.out.printf("#%d ON\n", test_case);
else System.out.printf("#%d OFF\n", test_case);
}
}
}
1. 어려웠던 점:
- 비트 마스킹을 공부하고 바로 푼게 아니었다면, 다른 복잡한 풀이법을 생각했을 것 같다.
2. 알게된 점:
- 비트 마스킹의 편리함
3. 알고리즘 풀이:
- 마지막 N개의 비트를 표현해주기 위해 (1 << N) - 1 을 사용한다.
만약, 2개의 비트라면 11이 되고 3개라면 111 이런 식으로 된다.
(1 << N) - 1 과 M 을 and 연산해서 모두 1이 된다면 M의 마지막 N개 비트가 전부 1임을 알 수 있다.
ex) N = 3, M = 23
(1 << N) - 1 == (1 << 3) - 1 == 111
M = 23 = 10111
10111 & 111 = 00111 == 111
'알고리즘 문제풀이 > SWEA' 카테고리의 다른 글
[SWEA 1230] 암호문3 with JAVA (0) | 2021.07.21 |
---|---|
[SWEA 3316] 동아리실 관리하기 with JAVA (0) | 2021.07.19 |
[SWEA 1288] 새로운 불면증 치료법 with JAVA (0) | 2021.07.19 |