2진수로 이루어진 6자리 비트 패턴이 8개 존재한다
여기서 새로들어오는 입력과 비교하여 비트 한개가 다른 것 까지 허용한다
비트 연산 &, ^를 사용하여 패턴과 들어온 2진수를 비교한다
이때 뒤에서부터 계산하는 것을 확인한다
#include <stdio.h>
int pattern[8] = { 0, 15, 19, 28, 38, 41, 53, 58 };
int chk(int num) // ^ & 비트연산 사용하여, 하나만 다른지 확인하기
{
int i, dif;
for (i = 0; i < 8; i++) {
dif = (num ^ pattern[i]); // 비교해서 다른 것 저장
if ((dif & (dif - 1)) == 0) break; // 하나가 다르거나, 같으면,
}
return i;
}
int main()
{
int i, j, tmp, num, arr[10], N;
scanf("%d", &N); // 입력 받는 갯수
for (i = 0; i < N; i++) { // i를 확장하면서 만들음
num = 0;
for (j = 0; j < 6; j++) {
scanf("%1d", &tmp);
num = num * 2 + tmp; // 2진수 6자리를 10진수로 만들기
}
arr[i] = chk(num); // 해당 숫자가 패턴에 있는지 확인
if (arr[i] >= 8) { // 해석 불가한 숫자이면
printf("%d\n", i + 1);
return 0;
}
}
for (i = 0; i < N; i++) printf("%c", arr[i] + 'A');
return 0;
}
5 011111000000111111000000111111 |
3 |
'Algorithms > simulation' 카테고리의 다른 글
3 Problem C : 테트리스 (0) | 2019.11.06 |
---|---|
2 Problem F : 합이 0이 되는 4개의 숫자들 (0) | 2019.11.06 |
Problem E : 기수정렬(Radix Sort) (0) | 2019.11.05 |
Problem D : 계수정렬(counting sort)1 (0) | 2019.11.05 |
그래프의 삼각형 (0) | 2019.01.30 |
댓글