본문 바로가기

백준/구현

달팽이

728x90

www.acmicpc.net/problem/1913

 

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;


}

'백준 > 구현' 카테고리의 다른 글

빙고  (0) 2021.04.15
오리  (0) 2021.04.05
소가 길을 건너간 이유  (0) 2021.04.05
로봇  (0) 2021.04.02
병든 나이트  (0) 2021.03.27