티스토리 뷰
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