C언어 문제풀이

SWEA 1954번: 달팽이 숫자 (D2)

지식보부상님 2023. 11. 13. 23:23

SWEA 1954번: 달팽이 숫자

 

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을 리턴해야합니다.
}

 

처음과 끝 지점을

채점결과

지정하여 방향을 돌릴 수 있도록 하였다.