[C언어 코드업 문제풀이] CodeUp 1479 : [기초-배열연습] 2차원 배열 빗금 채우기 3-4

코드업 1479번 2차원 배열 빗금 채우기 3-4 문제 풀이 해답입니다.

 

1. 문제 설명

 

다음과 같은 n*m 배열 구조를 출력해보자.

입력이 3 4인 경우 다음과 같이 출력한다.
9 6 3 1
11 8 5 2
12 10 7 4

입력이 4 5인 경우는 다음과 같이 출력한다.
14 10 6 3 1
17 13 9 5 2
19 16 12 8 4
20 18 15 11 7

입력이 n m인 경우의 2차원 배열을 출력해보자.

 

2. 입력

 

첫 번째 줄에 배열의 크기 n m이 입력된다.
[입력값의 정의역]
1<=  n,m <= 100

 

3. 출력

 

n*m 크기의 배열을 설명과 같이 채워 출력한다.

 

4. 입력 예시

 

2 3

 

5. 출력 예시

 

5 3 1

6 4 2

 

6. 문제 풀이

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "stdio.h"
 
 
int main(void)
{
    int Arr[101][101= {};
    
    
    int n,m;
    scanf("%d %d"&n, &m);
 
    
    
    /*
     
     14-(1,1)|10-(1,2)| 6-(1,3)| 3-(1,4)| 1-(1,5)
     --------------------------------------------
     17-(2,1)|13-(2,2)| 9-(2,3)| 5-(2,4)| 2-(2,5)
     --------------------------------------------
     19-(3,1)|16-(3,2)|12-(3,3)| 8-(3,4)| 4-(3,5)
     --------------------------------------------
     20-(4,1)|18-(4,2)|15-(4,3)|11-(4,4)| 7-(4,5)
     
     */
    //대각선의 요소는 해당 요소가 (i,j)라면 (i-1, j-1),(i+1,j+1)
    int x = 1;
    int i = 1;
    int j = m; //시작이 (1,m)에서 시작.
    int temp_j = j;
    int temp_i = i;
    for(int k = 1; k <=n*m; k++){
        if( ( i >= 1 && i <= n) && ( j >= 1 && j <= m) ){
            
            Arr[i][j] = x;
            x++;
            i--;
            j--;
            if!(( i >= 1 && i <= n) && ( j >= 1 && j <= m)) ){ //대각선이 밑으로(범위밖)으로 나갔을때
                temp_i++//아래로 시작점 이동
                if(temp_i >n){ //범위 밖이면
                    temp_i = n;
                    temp_j--;
                }
                i = temp_i;
                j = temp_j;
            }
        }
 
 
        
    }
    
    
 
    for(int i = 1; i <= n; i++){
        
        for(int j = 1; j <= m ; j++){
            printf("%d ",Arr[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}
 
 

댓글()