BOJ 10157 자리배정


사용한 알고리즘

  • 구현

알고리즘 설명

  • (1,1) ~ (1-R)로 한칸씩 움직이고 끝까지 가면, 방향을 시계방향으로 90도 회전시키고 끝까지 가는걸 반복한다.
  • 위를 K번 반복하고 그 좌표를 출력한다.

풀이

// baekjoon 10157 yechan
#include <cstdio>
#include <algorithm>
using namespace std;

const int dir[4][2] = { {0, 1}, {1, 0}, {0, -1}, {-1, 0} };
int R, C, K, bx, by, tx, ty;

int main() {
	scanf("%d%d", &C, &R);
	scanf("%d", &K);
	if (C*R < K)
		return !printf("0\n");
	tx=C+1, ty=R+1;
	int d=0;
	int cx=1, cy=1;
	int dx=1, dy=0;
	while (--K) {
		if (cx + dir[d][0] == tx) {
			d = (d+1)%4;
			ty = cy;
		}
		else if (cy + dir[d][1] == ty) {
			d = (d+1)%4;
			bx = cx;
		}
		else if (cx + dir[d][0] == bx) {
			d = (d+1)%4;
			by = cy;
		}
		else if (cy + dir[d][1] == by) {
			d = (d+1)%4;
			tx = cx;
		}
		cx = cx + dir[d][0];
		cy = cy + dir[d][1];
	}
	printf("%d %d\n", cx, cy);
	return 0;
}



© 2020.08. by fbdp1202

Powered by theorydb