반응형
출처: http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2073&sca=20
Approach
아래와 같이 상단 중간 위치를 기준으로 마름모를 형성합니다.
- 아스키 코드 A(65) ~ Z(90)까지 값을 채워갑니다.
초기 N (가장 큰 마름모의 한 변의 길이) 홀/짝과 관계없이 마름모 한 변의 길이는
안쪽으로 갈수록 1씩 감소하므로, 제일 중앙 위치(map[N][N])는 4가지 방향으로 돌지않고 값을 대입하면 됩니다.
#include <stdio.h>
const int MAX_N = 100 + 5;
int N, x, y, val;
int map[MAX_N * 2][MAX_N * 2];
const int dx[] = { 0, 1, 1, -1, -1 };
const int dy[] = { 0, -1, 1, 1, -1 };
void printMap() {
int left = N, right = N;
for (int i = 1; i <= 2 * N - 1; ++i) {
// 알파벳 앞에 공백 처리
for (int j = 1; j < left; ++j) {
printf(" ");
}
for (int j = left; j <= right; ++j) {
printf("%c ", map[i][j]);
}
if (i < N) left--, right++;
else left++, right--;
printf("\n");
}
}
int main() {
// freopen("input.txt", "r", stdin);
scanf("%d", &N);
int sideSize = N;
int val = 65;
// (중앙) 시작점
for (int i = 1; i <= N; ++i) {
x = i, y = N;
// 방향 4개
for (int j = 1; j <= 4; ++j) {
// 마름모의 길이 - 1
for (int k = 1; k < sideSize; ++k) {
map[x][y] = val++;
// A ~ Z 순환
if (val > 90) val = 65;
x = x + dx[j];
y = y + dy[j];
}
}
// 안쪽으로 갈수록 마름모 변의 길이 -1
sideSize--;
}
// 가장 중앙 좌표의 값
map[N][N] = val;
// 출력
printMap();
}
반응형
'PS 문제 풀이 > Jungol' 카테고리의 다른 글
[Jungol] 정올 1641 숫자삼각형 (0) | 2021.03.17 |
---|---|
[Jungol] 정올 1495 대각선 지그재그 (0) | 2021.03.17 |
[Jungol] 정올 1009 각 자리수의 역과 합(Number Reverse) (0) | 2021.03.17 |
[Jungol] 정올 1692 곱셈 (0) | 2021.03.17 |
[Jungol] 정올 1097 앞뒤 같은 제곱 (0) | 2021.03.17 |
댓글