반응형

#include<stdio.h>
#include<algorithm>

int a[1000][1000];

int main(void)
{
	int N,num;
	
	scanf("%d", &N); 
	scanf("%d", &num);

	int tmp = N;
	int r = N / 2;
	int b[2] = {0,0};

		
		
	a[r][r] = 1; // N이 홀수일 때 맨 가운데 값 1 설정
	for (int i = 0; i < r; i++)
	{
		for (int j = 0; j < tmp - 1; j++)
		{
			// 배열에 숫자로 채우기

			if (N % 2 == 1) // N이 홀수일때
			{
				a[j + i][i] = tmp * tmp - j;
				a[N - 1 - i][j + i] = tmp * tmp - j - 1 * (tmp - 1);
				a[N - 1 - j - i][N - 1 - i] = tmp * tmp - j - 2 * (tmp - 1);
				a[i][N - 1 - j - i] = tmp * tmp - j - 3 * (tmp - 1);
			}
			else if (N % 2 == 0) // N이 짝수일때
			{
				a[j + i][i] = tmp * tmp - j - 2 * (tmp - 1);
				a[N - 1 - i][j + i] = tmp * tmp - j - 3 * (tmp - 1);
				a[N - 1 - j - i][N - 1 - i] = tmp * tmp - j;
				a[i][N - 1 - j - i] = tmp * tmp - j - 1 * (tmp - 1);
			}

			// 찾는 값 좌표 기록하기
			if (a[j + i][i] == num)
			{
				b[0] = j + i;
				b[1] = i;
			}
			else if (a[N - 1 - i][j + i] == num)
			{
				b[0] = N - 1 - i;
				b[1] = j + i;
			}
			else if (a[N - 1 - j - i][N - 1 - i] == num)
			{
				b[0] = N - 1 - j - i;
				b[1] = N - 1 - i;
			}
			else if (a[i][N - 1 - j - i] == num)
			{
				b[0] = i;
				b[1] = N - 1 - j - i;
			}
		}
		tmp -= 2; 
	}
	
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++)
		{
			printf("%d ", a[i][j]);
		}
		printf("\n");
	}
	printf("%d %d", b[0]+1, b[1]+1);


}

 

 

풀이는 1000*1000 배열을 생성하고 N이 만약 7이라면 맨 바깥쪽 부분을 숫자로 채운 뒤 N - 2를 해주어 N이 5인 경우도 똑같이 채워나가는 식으로 하였고 N 이 홀수 일때와 짝수 일때 나눠서 풀이를 하였다.

 

 

https://www.acmicpc.net/problem/1913

 

1913번: 달팽이

N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 출력한다.

www.acmicpc.net

 

반응형

+ Recent posts