본문 바로가기

알고리즘 문제풀이/SWEA

[SWEA 10726] 이진수 표현법 with JAVA

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

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