Skip to main content Link Menu Expand (external link) Document Search Copy Copied

10726. 이진수 표현

Code Battle (`23 동계 대학생 S/W 알고리즘 특강 기초학습 문제)


본 게시글은 개인 학습 용도로 작성한 게시글입니다.

(문제 출처: SW Expert Academy)


  • 비트연산을 이용하여 $O(N)$시간에 풀이
  • 마지막 $n$개의 비트가 1인지 검사하면 되므로, right-shift 연산 후 LSB가 1인지를 검사하는 것을 $n$회 반복한다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Solution {
    public static void main(String[] args) throws Exception {
        // System.setIn(new FileInputStream("sample_input.txt"));
        new Solution();
    }

    private BufferedReader bufferedReader;
    private BufferedWriter bufferedWriter;

    private Solution() throws IOException {
        bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
        solve();
        bufferedReader.close();
        bufferedWriter.close();
    }

    private void solve() throws IOException {
        int T = Integer.parseInt(bufferedReader.readLine());
        for (Integer testCaseNo = 1; testCaseNo <= T; testCaseNo++) {
            bufferedWriter.write("#"+testCaseNo+" "+solveTestCase()+"\n");
        }
    }

    private String solveTestCase() throws IOException {
        StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
        Integer N = Integer.parseInt(stringTokenizer.nextToken());
        Integer M = Integer.parseInt(stringTokenizer.nextToken());
        return solveTestCase(N, M);
    }

    private String solveTestCase(Integer size, Integer number) {
        boolean answer = true;
        while (size > 0) {
            if ((number & 1) == 0) {
                answer = false;
                break;
            }
            number >>>= 1;
            size--;
        }
        return answer ? "ON" : "OFF";
    }
}

Back to top