본문 바로가기
PS 문제 풀이/Jungol

[Jungol] 정올 1495 대각선 지그재그

by 까망 하르방 2021. 3. 17.
반응형

출처: http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=767&sca=2020

Approach

- 영역을 2개로 나눕니다.

 

- 각 영역을 아래와 같이 숫자를 채워갑니다.

 


#include <stdio.h>
 
const int dx[] = {1, -1};
const int dy[] = {-1, 1};
int N, x, y, dir, val;
int map[101][101];
int main() {
    // freopen("input.txt", "r", stdin);
    scanf("%d", &N);
    // 시작점
    x = y = 1;    
    // 첫번째 영역
    for (int i = 1; i <= N; ++i) {
        map[x][y] = ++val;
        for (int j = 1; j < i; ++j) {
            // 대각선 방향
            x = x + dx[dir];
            y = y + dy[dir];
            map[x][y] = ++val;
        }
 
        if (i % 2 == 0) {
            if (i == N) x++;
            else y++;
            dir = 0;
        }
        else {
            if (i == N) y++;
            else x++;
            dir = 1;
        }
    }
 
    // 두번째 영역
    for (int i = N - 1; i >= 1; --i) {
        map[x][y] = ++val;
        for (int j = 1; j < i; ++j) {
            // 대각선 방향
            x = x + dx[dir];
            y = y + dy[dir];
            map[x][y] = ++val;
        }
        if (i % 2 == 0) { 
            x++;
            dir = 0;
        }
        else {
            y++;
            dir = 1;
        }
    }
 
    for (int i = 1; i <= N; ++i) {
        for (int j = 1; j <= N; ++j) {
            printf("%d ", map[i][j]);
        }
        printf("\n");
    }
}

 

반응형

댓글