C언어/C언어 2차시

2차시 문제 1번 풀이

sjong 2023. 4. 9. 03:57

먼저 처음엔 알고리즘을 알아야 한다. 가로나 세로로 규칙을 찾아보려 했으나 후에 대각선 배열이라는 것을 알게 되었다. 처음엔 n의 값을 입력받고 다음에 2차원 배열 arr을 선언하여 그 크기를 100x100으로 둔다. 그다음 변수 l=0으로 두어 후에 반복문에 쓴다.

먼저 조건을 i=0;i<n;i++로 하는 반복문을 두어 n 번만큼 반복한다. 그리고 그 안에 반복문을 한 번 더 넣고 조건 j=0;j<=i;j++을 두어 i+1번만큼 반복한다. 그리고 배열 arr의 [n-i-1+j][j] 위치를 l로 둔 뒤 l을 1만큼 더한다. 이렇게 되면 알고리즘이 완성된다. 만약 n이 5라 하면 [4,0],[3,0],[4,1],[2,0],[3,1]],[4,2]...처럼 대각선 순서로 1씩 증가한다. 이 반복문이 끝나면 모양은 이렇게 된다.

ex)n=3

4 0 0

2 5 0

1 3 6

그리고 나머지 부분은 다시 다른 반복문으로 채워줘야 한다. 

먼저 조건을 i=1;i<n;i++로 하는 반복문을 두어 n-1만큼 반복한다. i=1인 이유는 이미 그전 반복문에서 가운데 대각선을 저장했기 때문에 그다음 대각선부터 해야 하기 때문이다. 그리고 그 안에 반복문을 한 번 더 넣고 이 또한 같은 이유로 조건을 j=0;j<n-i;j++로 둔다. 그리고 반복하며 역순으로 출력해 나간다. 만약 n이 5라면 [0,1],[1,2],[2,3],[3,4][0,2][1,3]...처럼 대각선 순서로 1씩 증가하는 대신 그전과 달리 대각선의 길이는 줄어든다. 이 반복문만 출력하면 모양은 이렇게 된다.

ex)n=3

0 7 9

0 0 8

0 0 0

그리고 이제 전에 만든 코드와 이것을 합쳐주면 된다.

이중 반복문으로 nxn 만큼 반복하여 nxn의 수를 배열 arr[0][0]부터 시작하여 arr[n-1][n-1]까지 출력한다.
그렇게 되면 모양은 이렇게 된다.

ex)n=3

4 7 9

2 5 8

1 3 6