문제
총 100,000 비트로 이루어진 이진수 A와 B가 주어진다. 이때, A & B, A | B, A ^ B, ~A, ~B를 한 값을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 이진수 A, 둘째 줄에 이진수 B가 주어진다. 두 이진수의 길이는 모두 100,000이다. 예제의 경우에만 길이가 10이며, 예제는 채점하지 않는다.
출력
첫째 줄부터 한 줄에 하나씩 차례대로 A & B, A | B, A ^ B, ~A, ~B를 출력한다.
풀이 과정
100,000 비트로 이루어진 이진수는 저장하기도 힘드므로, 문자열에 저장해서 하나하나씩 비트 연산하는 것처럼 출력한다.
C
#include <stdio.h>
#include <string.h>
char a[100005];
char b[100005];
int main(void) {
scanf("%s", a);
scanf("%s", b);
int size = strlen(a);
// A & B
for (int i = 0; i < size; i++) {
if (a[i] == '1' && b[i] == '1') printf("1");
else printf("0");
}
printf("\n");
// A | B
for (int i = 0; i < size; i++) {
if (a[i] == '0' && b[i] == '0') printf("0");
else printf("1");
}
printf("\n");
// A ^ B
for (int i = 0; i < size; i++) {
if (a[i] != b[i]) printf("1");
else printf("0");
}
printf("\n");
// ~A
for (int i = 0; i < size; i++) {
if (a[i] == '0') printf("1");
else printf("0");
}
printf("\n");
// ~B
for (int i = 0; i < size; i++) {
if (b[i] == '0') printf("1");
else printf("0");
}
return 0;
}
Python
import sys
input = sys.stdin.readline
a = input().rstrip()
b = input().rstrip()
# A & B
for i in range(len(a)):
if a[i] == b[i] == '1': print('1', end='')
else: print('0', end='')
print()
# A | B
for i in range(len(a)):
if a[i] == '1' or b[i] == '1': print('1', end='')
else: print('0', end='')
print()
# A ^ B
for i in range(len(a)):
if a[i] != b[i]: print('1', end='')
else: print('0', end='')
print()
# ~A
for i in a:
if i == '0': print('1', end='')
else: print('0', end='')
print()
# ~B
for i in b:
if i == '0': print('1', end='')
else: print('0', end='')
print()
'-- 예전 기록 > BOJ' 카테고리의 다른 글
[ BOJ ] 24578 : Ultimate Binary Watch ( BRONZE 2 ) / C, Python (0) | 2023.11.21 |
---|---|
[ BOJ ] 17608 : 막대기 ( BRONZE 2 ) / C, Python (0) | 2023.11.21 |
[ BOJ ] 23968 : 알고리즘 수업 - 버블 정렬 1 ( BRONZE 1 ) / C, Python (0) | 2023.11.21 |
[ BOJ ] 1373 : 2진수 8진수 ( BRONZE 1 ) / C, Python (0) | 2023.11.21 |
[ BOJ ] 1212 : 8진수 2진수 ( BRONZE 2 ) / C, Python (0) | 2023.11.21 |