알고리즘/백준

1913>달팽이

Diademata 2017. 12. 10. 04:13
반응형

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


문제

홀수인 자연수 N(3≤N≤999)이 주어지면, 다음과 같이 1부터 N2까지의 자연수를 달팽이 모양으로 N*N의 표에 늘어놓을 수 있다.


 9

 2

 8

 1

4

 7

 6

5


 25

 10

 11

 12

 13

 24

 9

 2

 3

 14

 23

8

 1

 4

 15

 22

 7

 6

 5

 16

 21

 20

 19

 18

 17


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;

}

반응형