티스토리 뷰

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

 

1913번: 달팽이

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

www.acmicpc.net

 

[백준][C++] 1913 달팽이

#include <iostream>
using namespace std;

int arr[1000][1000] = {};

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N, find;
	int ay, ax;

	cin >> N >> find;

	int s = N / 2;
	int y = s, x = s;

	int dir = 0;
	int dy[4] = { -1,0,1,0 };
	int dx[4] = { 0,1,0,-1 };

	int cnt = 1;
	int next = cnt;
	bool twice = false;
	for (int i = 1; i <= N * N; i++) {
		if (i == find) {
			ay = y;
			ax = x;
		}
		arr[y][x] = i;
		y += dy[dir];
		x += dx[dir];
		if (i == next) {
			dir = (dir + 1) % 4;

			if (twice) cnt++;
			twice = !twice;
			next = i + cnt;
		}
	}

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			cout << arr[i][j] << ' ';
		}
		cout << '\n';
	}
	cout << ay + 1 << ' ' << ax + 1;

	return 0;
}
댓글