C 언어로 CPS Festival 6번 문항 풀기
추천글 : 【C 언어】 C 언어 목차
Q. 다음과 같은 주사위 4개가 있다. 단, 주사위 위에는 Q와 V를 제외한 대문자 알파벳이 쓰여있고, 어떤 두 주사위도 공통된 문자가 나타나지 않는다.
위 주사위로 다음과 같은 단어를 만들었다고 한다.
BOXY, BUCK, CHAW, DIGS, EXAM, FLIT, GIRL, JUMP, OGRE, OKAY, PAWN, ZEST
이때 각 알파벳이 어떤 주사위에 들어가는지 구하라.
Solution.
아래 코드는 나머지 알파벳에 대한 모든 경우를 따져준 것이다. 각 배열에 저장된 값은 그 알파벳이 몇 번 주사위에 놓이는지이다. 코드를 실행시키면 8가지 결과가 나온다. (클릭해서 확인 바람)
1: (×)
2: (O)
3: (×)
4: (×)
5: (×)
6: (×)
7: (×)
8: (×)
이때 O, ×를 판단하는 기준은 오직 각 알파벳이 6개씩 나뉘어 배치됐나의 여부였다. 이처럼 문제의 모든 조건을 쓰지 않아도 풀리는 문제였다. 2번 케이스가 정답인지 아닌지에 대해서는 별도의 검토를 해보길 바란다.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int a[24], i, j;
a[0]=3; // A in the 3rd dice
a[1]=3; // B in the 3rd dice
a[2]=4; // C in the 4th dice
a[4]=1; // E in the 1st dice
a[7]=2; // H in the 2nd dice
a[9]=3; // J in the 3rd dice
a[10]=2; // K in the 2nd dice
a[12]=4; // M in the 4th dice (by EXAM)
a[13]=4; // N in the 4th dice
a[14]=4; // O in the 4th dice
a[15]=2; // P in the 2nd dice
a[19]=1; // U in the 1st dice
a[20]=1; // W in the 1st dice (by CHAW)
a[21]=2; // X in the 2nd dice (by BOXY)
a[22]=1; // Y in the 1st dice
for(a[3]=1; a[3]<5 ;a[3]++){ // D in all dices
for(a[5]=1; a[5]<5; a[5]++){ // F in all dices
for(a[6]=2; a[6]<4; a[6]++){ // G in all dices but 1st dice, 4th dice (cf. OGRE)
for(a[8]=1; a[8]<5; a[8]++){ // I in all dices
for(a[11]=1; a[11]<5; a[11]++){ // L in all dices
for(a[16]=2; a[16]<4; a[16]++){ // R in all dices but 1st dice, 4th dice (cf. OGRE)
for(a[17]=2; a[17]<5; a[17]++){ // S in all dices but 1st dice (cf. ZEST)
for(a[18]=2; a[18]<5; a[18]++){ // T in all dices but 1st dice (cf. ZEST)
for(a[23]=2; a[23]<5; a[23]++){ // Z in all dices but 1st dice (cf. ZEST)
if(a[3]!=a[8] && a[3]!=a[6] && a[3]!=a[17] && a[8]!=a[6] && a[8]!=a[17] && a[6]!=a[17]){
/* condition: DIGS */
if(a[5]!=a[11] && a[5]!=a[8] && a[5]!=a[18] && a[11]!=a[8] && a[11]!=a[18] && a[8]!=a[18]){
/* condition: FLIT */
if(a[6]!=a[8] && a[6]!=a[16] && a[6]!=a[11] && a[8]!=a[16] && a[8]!=a[11] && a[16]!=a[11]){
/* condition: GIRL */
if(a[14]!=a[6] && a[14]!=a[16] && a[14]!=a[4] && a[6]!=a[16] && a[6]!=a[4] && a[16]!=a[4]){
/* condition: OGRE */
if(a[23]!=a[4] && a[23]!=a[17] && a[23]!=a[18] && a[4]!=a[17] && a[4]!=a[18] && a[17]!=a[18]){
/* condition: ZEST */
for(j=0; j<24; j++) printf("%d", a[j]); printf("\n");}}}}}}}}}}}}}}
return 0;
}
입력: 2013.09.24 16:22
'▶ 자연과학 > ▷ C, C++' 카테고리의 다른 글
【코딩】 C 언어로 진법변환 (10진법 → 2진법) (0) | 2016.06.27 |
---|---|
【C 언어】 C 언어 목차 (0) | 2016.06.27 |
【코딩】 C 언어로 최단경로 알고리즘 (0) | 2013.12.13 |
【코딩】 C 언어 또는 파이썬으로 행렬의 곱 구현하기 (0) | 2013.07.11 |
【코딩】 C 언어로 이미지 입출력하기 (0) | 2013.04.17 |
최근댓글