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";
}
}