프로그램 개발에 대해 배우게 되면 기초로 구구단이라던지, 성적 계산, 마방진 이런 코드를 짜보게 됩니다.
이번에 소개할 코드는 마방진 구현 코드입니다.^^
컴퓨터를 뒤지다가 발견하였네요. ㅎㅎ
10년도 더 전에 프로그램 공부할 때, C로 짰던 고전!!! 마방진 코드입니다.
마방진이란 간단히, 아래 표처럼
4 |
9 |
2 |
3 |
5 |
7 |
8 |
1 |
6 |
가로와 세로로 홀수개의 칸이 존재하며, 각 칸에 포함된 숫자를 세로로 더한 값, 가로로 더한 값, 대각선으로 더한 값이 모두 동일하게 나오는 표를 말합니다.
위의 표는 어느 방향으로 숫자를 더하든지 간에 모두 15라는 값으로 동일합니다.
4 + 9 + 2 = 15 (상단 첫번째 열)
9 + 5 + 1 = 15 (가운데 세로열)
2 + 5 + 8 = 15 (우측 상단 - 좌측 하단 대각선)
아래 소스 코드는 표의 크기를 입력하면 자동으로 해당 표의 크기에 맞는 마방진을 만들어주는 코드입니다.
#include <stdio.h>
void main()
{
int magic[19][19] = {0, };
int i, j, ix, iy, x, y;
int count = 1, length, again;
printf("\t-----------------------------------\n");
printf("\t-- 마 방 진 (Magic Square) --\n");
printf("\t-----------------------------------\n\n");
while(1)
{
do
{
printf("\n\t만들기 원하는 마방진의 길이를 입력하세요.\n");
printf("\t(홀수만, 19이하) -> ");
scanf("%d", &length);
} while(length%2 == 0 || length < 0 || length > 19);
printf("\n");
x = length/2, y = 0;
count = 1;
for(i=0; i<length; i++)
for(j=0; j<length; j++)
magic[i][j] = 0;
for(i=0; i<length*length; i++)
{
magic[x][y] = count;
ix = x, iy = y;
x++, y--;
if(x > length-1) x = 0;
if(y < 0) y = length-1;
if(magic[x][y] != 0)
{
x = ix, y = iy + 1;
}
count++;
}
for(i=0; i<length; i++)
{
for(j=0; j<length; j++)
printf(" %3d", magic[j][i]);
printf("\n");
}
do
{
printf("\n\t다시 하시겠습니까? (YES : 1, No : 2> ");
scanf("%d", &again);
} while(again != 1 && again != 2);
if(again == 2)
break;
}
}
실행 화면은 다음과 같습니다. 간단하죠^^
순수 C로 구현되었기 때문에 C컴파일러만 있으면 빌드가 가능하며, 실행 파일 또한 포함되어 있습니다.
커맨드 환경(DOS 모드)으로 프로그램이 실행되며, 윈도우7에서도 정상 동작됨을 확인하였습니다.^^
'개발&컴퓨터 > 알고리즘' 카테고리의 다른 글
[알고리즘문제] 숫자 대응 (0) | 2015.04.18 |
---|---|
[알고리즘문제] 수열 추정 (0) | 2015.03.31 |
[소개] 알고리즘을 쉽게 이해하며 배워보기 (VisuAlgo.NET) (1) | 2015.03.15 |
[알고리즘문제] 전화 수신 전환 문제 (0) | 2015.03.12 |
두 선분간의 거리 구하기 (4) | 2015.02.27 |