int n;: 사용자로부터 입력받을 정수 n을 저장하는 변수이다.
int map[50][50] = {0};: n x n 크기의 2차원 배열을 나타내는 map 배열을 초기화한다. 배열의 모든 요소를 0으로 초기화한다.
int m = 1;: 나선형으로 숫자를 채울 때 사용할 값입니다. 초기값은 1로 설정된다.
int cnt = 0, line = 0, large = n - 1, small = n - 1; 숫자를 채우는 방향과 범위를 제어하기 위한 변수들이다. cnt는 행 또는 열을 나타내는 변수로 사용되고, line은 열의 시작, large는 행의 끝, small은 열의 끝을나타낸다.
while (cnt <= large && line <= small) {: cnt가 large보다 작거나 같고, line이 small보다 작거나 같을 때까지 반복한다
첫 번째 for 루프: 현재 행에 대해 열을 나선형으로 숫자를 채운다. map[cnt][col]에 m을 넣고, m을 증가시킨다. 이때 col은 line부터 small까지 증가한다.
cnt++;: 행을 증가시킨다.
두 번째 for 루프: 현재 열에 대해 행을 나선형으로 숫자를 채운다. map[row][small]에 m을 넣고, m을 증가시킨다. 이때 row는 cnt부터 large까지 증가한다.
small--;: 열을 감소시킨다.
if (cnt <= large) { ... }: 행이 겹치지 않을 때, 현재 행에 대해 반대로으로 숫자를 채운다.
if (line <= small) { ... }: 열이 겹치지 않을 때, 현재 열에 대해 반대로으로 숫자를 채운.