본문 바로가기

CS/APS

[SW Expert Academy] 10726. 이진수 표현 (Java)

 

문제 설명


핵심

대놓고 비트 연산을 다룰 수 있는지 묻는 문제

예시 입력 중 하나로 "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
반응형