[자료구조] 배열대각선 출력

_찬·2022년 9월 10일
0

자료구조

목록 보기
1/5
post-thumbnail

아래 그림과 같이 배열이 배각선으로 출력하도록 만들어 보겠다.

출처 : https://dyndy.tistory.com/18

방법

위 그림은 1차원이 아닌 2차원 배열이다.

그래서 2중 for 문을 써야 할 것이다.

또한 숫자 2개를 입력 받아서 3행 4열을 할지 그냥 정사각형으로 할지는 입력을 받을때 받고 나서 for문 조건만 바꿔주기만 하면 된다.

2개의 숫자를 입력 받는 코드

#include <stdio.h>

int main()
{
	int arr[20][20] = {};
	int cnt = 0,value = 1;
	int n,m;
	
	scanf("%d %d",&n,&m);
	
	for(int i=0; i<m; i++){
		for(int j=0; j<n; j++){
			
		}
	}
	
	return 0;
}

위와 같이 만들어 주었고, 이제 2중 for문 안의 조건만 정하면 된다.
value는 ++을 하면서 배열안에 1 ~ n*m 까지만큼의 값을 넣어줄 것이다.
또한 cnt는 참인지 아닌지 구별하는 변수가 될 것이다.

지금 만드는 2차원 배열의 형태는 0,0에서 1,0 으로 가는 형태이다.
그래서 j는 행의 역할, i는 열의 역할을 한다. 그러면

1개의 숫자를 입력 받는 코드

arr[j][i] == (조건) 이 맞다면 value++을 넣어주면 된다.
다양한 코드들을 살펴보던중에 cnt의 값이 i + j 와 같다면 arr[j][i]에 value 값을 넣어 주는 것 이였다.
그리고 2중 for문을 while(1)로 무한반복 시켜주고, value 값이 n * m과 같다면 break;를 하여서 빠져나가는 코드였다.

내가 참고한 코드의 출처

그럼 코드는 이렇게 된다.

#include <stdio.h>

int main()
{
	int arr[20][20] = {};
	int cnt = 0,value = 1;
	int n,m;
	
	scanf("%d %d",&n,&m);
	
	while(1){
		for(int i=0; i<m; i++){
			for(int j=0; j<n; j++){
				if(i + j == cnt){
					arr[j][i] = value++;
				}
			}
		}
		cnt++;
		if(value - 1 == n * m) break;
	}
	
	for(int i=0; i<n; i++){
		for(int j=0; j<m; j++){
			printf("%2d ",arr[i][j]);
		}
		printf("\n");
	}
	
	return 0;
}


또한 그냥 한 가지 숫자로 하고 싶다면 n을 넣어서 모든 for에는 n까지로 조건문을 걸어주고 탈출문은 (value - 1 == n * n) 으로 하면 된다.
코드는 아래와 같다.

#include <stdio.h>

int main()
{
	int arr[20][20] = {};
	int cnt = 0,value = 1;
	int n;
	
	scanf("%d",&n);
	
	while(1){
		for(int i=0; i<n; i++){
			for(int j=0; j<n; j++){
				if(i + j == cnt){
					arr[j][i] = value++;
				}
			}
		}
		cnt++;
		if(value - 1 == n * n) break;
	}
	
	for(int i=0; i<n; i++){
		for(int j=0; j<n; j++){
			printf("%2d ",arr[i][j]);
		}
		printf("\n");
	}
	
	return 0;
}

profile
꾸준한 사람이 되길!

0개의 댓글