데일리 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;
}