C언어 문제풀이
SWEA 1954번: 달팽이 숫자 (D2)
지식보부상님
2023. 11. 13. 23:23
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
#include<stdio.h>
#include <malloc.h>
int main()
{
int test_case;
int T;
int N, i, j, num;
int row, col, e_pt, s_pt;
int **board;
scanf("%d", &T);
for (test_case = 1; test_case <= T; ++test_case)
{
num = 1;
row = 0;
col = 0;
scanf("%d", &N);
e_pt = N - 1;
s_pt = 0;
board = (int**)malloc(sizeof(int*)*N);
for (i = 0; i < N; i++) {
board[i] = (int*)malloc(sizeof(int)*N);
}
while (num<=N*N) {
if (s_pt == e_pt) {
board[s_pt][e_pt] = num++;
}
//가로 오른쪽 방향
for (col = s_pt; col < e_pt; col++) {
board[row][col] = num++;
if (num > N*N) {
break;
}
}
//세로 아래방향
for (row = s_pt; row < e_pt; row++) {
board[row][col] = num++;
if (num > N*N) {
break;
}
}
//가로 왼쪽방향
for (col = e_pt; col > s_pt; col--) {
board[row][col] = num++;
if (num > N*N) {
break;
}
}
//세로 위쪽방향
for (row = e_pt; row > s_pt; row--) {
board[row][col] = num++;
if (num > N*N) {
break;
}
}
s_pt++;
e_pt--;
row++;
}
printf("#%d\n", test_case);
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", board[i][j]);
}
printf("\n");
}
}
return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
처음과 끝 지점을
지정하여 방향을 돌릴 수 있도록 하였다.