티스토리 뷰

1) 생각

주어진 2개의 10만 자리의 bit를 가지고 bit연산 출력을 하여라.


처음 생각

java에는 딱히 bit를 받을 만한게 없는것 같으므로(모르는것일 가능성이 높다.) 배열을 사용해서 String으로 받은 뒤 한자리 씩 배열에 넣어주었다.


다음 생각

별 생각없이 ~A와 ~B를 비트 연산 ~ 처리를 해줬더니 - 값이 나왔다. 보수가 적용된 것이다.


2) 방안

1) - 값이 나오는 것을 방지하면서 원래 bit의 0과 1을 flip하기 위해서 1과의 ^(or) 연산을 사용하였다. or 연산은 01과 10일 경우 1 그외의 00 11은 0의 결과를 나타내므로 원본 bit를 뒤집은 효과를 낼 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.io.IOException;
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int[] a = new int[100001];
        int[] b = new int[100001];
        String t = sc.nextLine();
        String tt = sc.nextLine();
        for(int i=0;i<t.length();i++) {
            a[i] = t.charAt(i)-'0';
            b[i] = tt.charAt(i)-'0';
        }
        StringBuilder sb = new StringBuilder();
        // A&B
        for(int i=0;i<t.length();i++)
            sb.append(a[i]&b[i]);
        sb.append("\n");
        // A|B
        for(int i=0;i<t.length();i++)
            sb.append(a[i]|b[i]);
        sb.append("\n");
        // A^B
        for(int i=0;i<t.length();i++)
            sb.append(a[i]^b[i]);
        sb.append("\n");
        // ~A
        for(int i=0;i<t.length();i++)
            sb.append(a[i]^1);
        sb.append("\n");
        // ~B
        for(int i=0;i<t.length();i++)
            sb.append(b[i]^1);
        sb.append("\n");
        System.out.println(sb);
    }
}
cs


'알고리즘 > 백준' 카테고리의 다른 글

[백준] 2455번 지능형 기차  (0) 2018.08.31
[백준] 1260번 DFS와 BFS  (0) 2018.08.29
[백준] 1018번 체스판 다시 칠하기  (0) 2018.08.28
[백준] 13458번 시험 감독(Java)  (0) 2018.08.27
[백준] 1237번 정ㅋ벅ㅋ  (0) 2018.08.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday