C언어를 공부하다 보면 홀수 마방진에 대해 배운다.
마방진이란 무엇인가?
- 1부터 n*n까지의 연속된 자연수를 가로, 세로, 대각선의 합이 같아지도록 정사각형 모양으로 배열한 것이다.
C언어에서 이 마방진을 하는 것은 지나가는 과정에 불과하지만, 분명 알고리즘의 공부가 될 수 있다.
본 글에서는 홀수 마방진에 대해서 다루고자 한다.
마방진은 만드는 규칙은 다음과 같다.
1. 주어진 배열의 맨 윗줄의 가운데 칸에서 시작.
2. 현재 위치에서 우상(대각선 오른쪽 위) 방향으로 진행하며 1씩 증가하는 값을 넣는다.
3. 첫줄 다음은 마지막줄이며(행), 마지막줄 다음은 첫줄이다.(열) //행은 우리가 글을 읽을떄의 ~번째 줄과 같이 가로줄이라고 생각하면 외우기 쉽다.
4. 진행하는 방향에 값이 이미 있을 경우에는 그 방향이 아닌 마지막으로 넣은 칸의 한칸 아래로 진행한다.
예)
3 * 3 마방진
8 1 6
3 5 7
4 9 2
5 * 5 마방진
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
이 마방진을 만드는데에 필요한 C언어 지식은 for문과 if문이면 충분하다.
인터넷을 둘러보니 마방진을 만드는 데 함수를 과하게 이용하는 방법들이 많기에 간단한 방법을 소개한다.
코드는 다음과 같다.
핵심은 i%n==0 인 부분이다.
'이미 칸에 값이 들어있는 경우'를 이렇게 표현할 수 있다는 점이 중요하다.
많은 지식이 없더라도 분명 풀 수 있는 문제이다.
고등학교 지식으로 중학교 문제를 푼다면 정말 쉽게 풀겠지만, 중학교 지식으로 중학교 문제를 풀기 위해서는 머리를 꽤 써야 할 것이다.
같은 논리로, 지식을 적게 사용하면 그것을 처리하는 머리가 일해야 한다.
물론 코드는 짧고 단순할수록 실행 시간이 단축되고 받아들이는 컴퓨터가 편해진다.
실행시간 등 아직은 신경쓰지 않아도 될 부분이지만, 컴퓨터 과학을 전공하는 사람이라면 조금은 미리 알아두어도 괜찮을 것이라 생각한다.
'Programming > C 언어' 카테고리의 다른 글
C언어 - 파스칼의 삼각형 Pascal's Triangle (1) | 2017.09.19 |
---|---|
C언어 - 개미수열 (0) | 2017.09.18 |
C 언어 programming 예제 - 두번째 과제 (0) | 2017.08.22 |
C 언어 programming 예제 - 첫번째 과제 (0) | 2017.08.21 |
C programming 포스팅을 시작하며 (0) | 2017.08.21 |