프로그래밍 알고리즘

[정올 1239] 비밀편지

꾸준한사람 2023. 1. 2. 22:27
반응형

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&code=1239&sca=99 

 

JUNGOL

 

www.jungol.co.kr

#include <stdio.h>

//각 문자의 암호, Letter[0]은 C[0]='A'와 대응됨
int Letter[8][6] = { {0,0,0,0,0,0}, {0,0,1,1,1,1}, {0,1,0,0,1,1}, {0,1,1,1,0,0}, 
					 {1,0,0,1,1,0}, {1,0,1,0,0,1}, {1,1,0,1,0,1}, {1,1,1,0,1,0} };
//각 문자
char C[8] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' };
char Ans[10];
int N, tmp[6], cnt;

int GetC() {
	int failcnt;
	for (int i = 0; i < 8; i++) {
		failcnt = 0;
		for (int j = 0; j < 6; j++)	{
			if (Letter[i][j] != tmp[j]) failcnt++;
			if (failcnt >= 2) break; //암호가 2개 이상 틀리면 실패
		}
		if (failcnt <= 1)	return i; //암호 1개만 틀리면 그 복원가능
	}
	return -1;
}

int main(void)
{
	scanf("%d ", &N);
	int idx, failidx = -1;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < 6; j++)	scanf("%1d", &tmp[j]);
		idx = GetC(); //암호 6자를 받아서 어떤 문자인지 알아냄
		if (idx == -1) { failidx = i + 1; break; } //실패하면 문자의 번호 출력
		else Ans[cnt++] = C[idx];
	}

	if (failidx != -1)	printf("%d", failidx);
	else printf("%s", Ans);

	return 0;
}
반응형