2074: 마방진
시간제한: 1 Sec 메모리제한: 64 MB Special Judge제출: 876 해결: 589
홀수 정사각형의 크기를 입력 받은 후, 가로 세로 대각선의 합이 일정한 마방진을 출력하는 프로그램을 작성하시오.
마방진이란 1부터 N*N까지의 숫자를 한 번씩만 써서 정사각형에 배치하여 가로와 세로, 그리고 대각선의 합이 같도록 하는 것이다.
다음의 순서에 따라 각 위치에 차례대로 값을 넣는다.
1. 첫 번째 숫자인 1을 넣는 위치는 첫 번째 행
가운데이다.
2. 숫자가 N의 배수이면 바로 아래의 행으로 이동하여 다음의 수를 넣고
3. 그렇지 않으면 왼쪽 위로 이동하여 다음의
숫자를 넣는다. 만약 행이 첫 번째를 벗어나면 마지막 행으로 이동하고, 열이 첫 번째를 벗어나면 마지막 열로 이동한다.
1. 첫 번째 행 가운데(1,2)에 1을 넣는다.
2. 왼쪽 위로 이동하면 (0,1)인데 행의 위치가 처음을
벗어났으므로 마지막행(3,1)의 위치로 이동하여 2를 넣는다.
3. 왼쪽 위로 이동하면 (2,0)인데 열의 위치가 처음을 벗어났으므로
마지막열(2,3)의 위치로 이동하여 3을 넣는다.
4. 배열에 넣은 값(3)이 N의 배수이므로 바로 아래행으로(3,3) 이동하여 4를
넣는다.
5. 왼쪽 위로 이동하여 (2,2) 5를 넣는다.
6. 왼쪽 위로 이동하여 (1,1) 6를 넣는다.
7. 배열에 넣은
값(6)이 N의 배수이므로 바로 아래행으로(2,1) 이동하여 7을 넣는다.
8. 왼쪽 위로 이동하면 (1,0)인데 열의 위치가 처음을
벗어났으므로 마지막열(1,3)의 위치로 이동하여 8을 넣는다.
9. 왼쪽 위로 이동하면 (0,2)인데 행의 위치가 처음을 벗어났으므로
마지막행(3,2)의 위치로 이동하여 9를 넣는다.
정사각형의 크기 n(2부터 100사이의 홀수)을 입력받는다.
위에서 언급한 형태로 정사각형의 내부 숫자를 차례로 채운 후의 모습을 출력한다. 숫자 사이는 공백으로 구분한다.
3 6 1 8
7 5 3
2 9 4
|
5 15 8 1 24 17
16 14 7 5 23
22 20 13 6 4
3 21 19 12 10
9 2 25 18 11 | |
규칙대로 대각선 위쪽으로 쭉 채우면 되는데... 채우다가 입력할 부분의 인덱스가 벗어나는 경우에는 제시해 준 규칙대로 배열의 인덱스를 바꾸어 주면 된다. 전체 내용은 파일에서 보세요^^ |
'프로그래밍 > 알고리즘' 카테고리의 다른 글
1495: 대각선 지그재그 (0) | 2015.04.21 |
---|---|
1997: 떡 먹는 호랑이 (0) | 2015.04.21 |
1014: 돌다리 건너기 (0) | 2015.04.21 |
1331: 문자마름모 (0) | 2015.04.21 |
1707: 달팽이사각형 (0) | 2015.04.21 |