사용한 알고리즘
알고리즘 설명
- (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;
}