데일리 codeup/이차원 배열

2차원 배열과 패턴_220713

hayo_su 2022. 7. 13. 22:11

아래로 사각형 채우기

정사각형 한 변의 길이 n이 주어지면 아래 예와 같이 숫자로 된 정사각형 형태로 출력하는 프로그램을 작성해보세요.

n에 3이 주어지는 경우

1 4 7
2 5 8
3 6 9
#include <iostream>
using namespace std;
int main(){
    int n;
    cin >> n;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cout<< n*j+i+1<<' ';
        }
        cout<<endl;
    }
    return 0;
}

지그재그로 숫자 채우기

n * m크기의 직사각형에 숫자를 0부터 순서대로 1씩 증가시키며 왼쪽 위에서부터 시작하여 다음과 같이 지그재그 모양으로 숫자들을 쭉 채우는 코드를 작성해보세요.

입력

5 5

출력

0 9 10 19 20 
1 8 11 18 21 
2 7 12 17 22 
3 6 13 16 23 
4 5 14 15 24
#include <iostream>
using namespace std;
int main(){
    int n, m;
    cin >> n >> m;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(j%2==0)  cout<<n*j+i<<' ';
            else    cout<<n*(j+1)-1-i<<' ';
        }
        cout<<endl;
    }
    return 0;
}

대각선으로 숫자 채우기

n * m크기의 직사각형에 숫자를 1부터 순서대로 1씩 증가시키며 왼쪽 위에서부터 시작하여 오른쪽 아래 쪽까지 다음과 같은 방향으로 숫자들을 쭉 채우는 코드를 작성해보세요.

입력

3 5

출력

1 2 4 7 10
3 5 8 11 13
6 9 12 14 15
#include <iostream>
using namespace std;
int main(){
    int n, m, lim,cnt = 1;
    cin >> n >> m;
    int arr[n][m]={};    //0으로 초기화

    lim = n<m?n:m;
    for(int i=0;i<m;i++){
        for (int j=0;j<=(i>(n-1)?(n-1):i);j++){ //(0,0), (0,1), (0,2), (0,3),...,(0,m) 채우기
            arr[j][i-j] = cnt;
            cnt ++;
        }
    }

    for (int i=1;i<n;i++){
        for(int j=0;j<(n-i>m?m:n-i);j++){ //(1,m), (2,m), (3,m), (4,m),...,(n,m) 채우기  
            arr[i+j][m-j-1]= cnt;
            cnt ++;
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++)    cout<<arr[i][j]<<' ';
        cout<<endl;
    }
    return 0;
}

격자 반대로 채우기

n x n 크기의 격자에 정수를 채워넣으려고 합니다. 1부터 시작해서 차례대로 $n^2$ 까지 채워넣는데, 다음 그림과 같이 오른쪽 아래에서 부터 위 아래 지그재그 방향으로 채워넣는 프로그램을 작성해보세요.

입력

5

출력

25 16 15 6 5
24 17 14 7 4
23 18 13 8 3
22 19 12 9 2
21 20 11 10 1
#include <iostream>
using namespace std;
int main(){
    int n;
    cin >> n;
    int arr[n][n];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if((n-j)%2==0)  arr[i][j] = (n-j-1)*n + i + 1;
            else     arr[i][j] = (n-j)*n - i;
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++)    cout<<arr[i][j]<<' ';
        cout<<endl;
    }
    return 0;
}