반응형
출처: http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=609&sca=2020
Approach
아래와 같이 숫자를 채워갑니다.
map[0][0]을 시작으로 달팽이 모양 방향으로 숫자를 채워가는데 3가지 방향으로 존재합니다.
방향 전환하는 시기는 배열의 범위를 벗어나거나 이미 숫자가 채워진 경우입니다.
또한 멈추는 시기는 방향을 전환한 다음 지점이 범위를 벗어나거나 숫자가 채워진 경우입니다.
#include <stdio.h>
const int MAX_N = 100 + 5;
const int MOD = 10;
const int dx[] = {1, 0, -1};
const int dy[] = {1, -1, 0};
int map[MAX_N][MAX_N];
int N, r, c, dir, isChangeCnt, num;
void init() {
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
map[i][j] = -1;
}
}
}
bool isPossible(int x, int y) {
if (x >= N || y >= N || x < 0 || y < 0 || map[x][y] >= 0) {
return true;
}
return false;
}
int main() {
// freopen("input.txt", "r", stdin);
scanf("%d", &N);
init();
while (1) {
map[r][c] = num % MOD;
int nextR = r + dx[dir];
int nextC = c + dy[dir];
if (isPossible(nextR, nextC)) {
dir = (dir + 1) % 3;
nextR = r + dx[dir];
nextC = c + dy[dir];
if (isPossible(nextR, nextC))
break;
}
r = nextR, c = nextC;
num++;
}
for (int i = 0; i < N; ++i) {
for (int j = 0; j <= i; ++j) {
printf("%d ", map[i][j]);
}
printf("\n");
}
}
반응형
'PS 문제 풀이 > Jungol' 카테고리의 다른 글
[Jungol] 정올 3293 비트연산 1 (0) | 2021.03.18 |
---|---|
[Jungol] 정올 3101 요세푸스 문제 1 (0) | 2021.03.18 |
[Jungol] 정올 1641 숫자삼각형 (0) | 2021.03.17 |
[Jungol] 정올 1495 대각선 지그재그 (0) | 2021.03.17 |
[Jungol] 정올 1331 문자마름모 (0) | 2021.03.17 |
댓글