코딩테스트/코드업

2차원 배열 빗금 채우기 3-3 C++(1478)[code up,코드업]

멍토 2019. 12. 21.

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀 더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소입니다.

https://codeup.kr/problem.php?id=1478

 

[기초-배열연습] 2차원 배열 빗금 채우기 3-3

다음과 같은 n*m 배열 구조를 출력해보자. 입력이 3 4인 경우 다음과 같이 출력한다. 7 4 2 1 10 8 5 3 12 11 9 6 입력이 4 5인 경우는 다음과 같이 출력한다. 11 7 4 2 1 15 12 8 5 3 18 16 13 9 6 20 19 17 14 10 입력이 n m인 경우의 2차원 배열을 출력해보자.

codeup.kr


1. 문제

2. 문제 해석

3. 소스 코드


문제

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

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

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

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

입력

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

출력

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

입력 예시

2 3

출력 예시

4 2 1

6 5 3


2. 문제풀이

0부터 시작하기때문에 m+n에 -2가 필요합니다.

시작은 제일오른쪽열부터 시작하며 오른쪽 아래로 진행하는 방향입니다.

오른쪽부터 왼쪽으로 가는 반복문이 제일 안쪽에

위에서부터 아래로 가는 반복문이 그 위에 있어야 합니다.

규칙은 i+m-1-k가 j와 같을때 count를 증가시키며 숫자를 넣어주시면 되니다.


3. 소스코드

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
#include <iostream>
 
using namespace std;
 
int main() {
    int a[100][100], n, m;
    cin >> n >> m;
    for (int j = 0, count = 1; j <= n + m - 2; j++) {
        for (int i = 0; i < n; i++) {
            //제일 오른쪽 열부터 시작한다.
            for (int k = m - 1; k >= 0; k--) {
                //규칙을 찾으면 m- 1 -k +i를 하면 규칙적인 합이나온다.
                if (i + (m - 1 - k) == j) {
                    a[i][k] = count++;
                }
            }
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++)
            cout << a[i][j] << " ";
        cout << endl;
    }
    return 0;
}

댓글

💲 광고입니다.