728x90
1913번: 달팽이
N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서
www.acmicpc.net
#include <iostream>
#include <vector>
using namespace std;
int dx[] = { -1,0,1,0 };
int dy[] = { 0,1,0,-1 };
int main() {
int i, j;
int n,target;
cin >> n;
cin >> target;
vector<vector<int>>arr(n, vector<int>(n));
i = n / 2;
j = n / 2;
int num = 1;
int total = n*n;
int p = 1;
int ax = 0;
int ay = 0;
int dir = 0;
while (num != total) {
for (int t = 0; t < 2; t++) {
for (int k = 0; k < p; k++) {
arr[i][j] = num;
if (num ==target ) { ax = i+1; ay = j+1; }
i = i + dx[dir];
j = j + dy[dir];
num++;
if (num > total) { goto next; }
}
dir++;
if (dir > 3) { dir = 0; }
}
p++;
}
next:
for (int r = 0; r < n; r++) {
for (int q = 0; q < n; q++) {
cout << arr[r][q]<<" ";
}
cout << endl;
}
cout << ax << " " << ay << endl;
}