1913>달팽이
https://www.acmicpc.net/problem/1913
문제 홀수인 자연수 N(3≤N≤999)이 주어지면, 다음과 같이 1부터 N2까지의 자연수를 달팽이 모양으로 N*N의 표에 늘어놓을 수 있다.
N이 주어졌을 때, 이러한 표를 출력하는 프로그램을 작성하시오. 또한 N2 이하의 자연수가 하나 주어졌을 때, 그 좌표도 함께 출력하시오. 예를 들어 N=5인 경우 6의 좌표는 (4,3)이다. 입력 첫째 줄에 홀수인 자연수 N이 주어진다. 둘째 줄에는 위치를 찾고자 하는 N2 이하의 자연수가 하나 주어진다. |
code>>
#include<stdio.h>
#include<vector>
using namespace std;
int main()
{
vector<int[1000]> v(1000);
int size = 5, input;
scanf("%d", &size);
scanf("%d", &input);
int count = 1;
int x, y;
x = y = size / 2;
int idx = -1;
int cycle = 0;
v[y][x] = count++;
bool check = false;
while(size > 1)
{
for (int ii = 0; ii < 1 + cycle; ii++) //y축
{
y += idx;
v[y][x] = count++;
if (count > size * size)
{
check = true;
break;
}
}
if (check)break;
idx *= -1;
for (int ii = 0; ii < 1 + cycle; ii++) //x축
{
x += idx;
v[y][x] = count++;
}
cycle++;
}
int a_x, a_y;
for (int i = 0; i < size; i++)
{
for (int ii = 0; ii < size; ii++)
{
printf("%d", v[i][ii]);
if (v[i][ii] == input)
{
a_x = ii;
a_y = i;
}
if (ii != size - 1)printf(" ");
}
printf("\n");
}
printf("%d %d\n", a_y + 1, a_x + 1);
return 0;
}