//SWEA1961 숫자 배열 회전
#include <stdio.h>
int main(void){
int testCase, i, j, k;
int n;
int N[7][7] = {0};
scanf("%d", &testCase);
for(i=0; i<testCase; i++){
scanf("%d", &n);
for(j=0; j<n; j++){
for(k=0; k<n; k++){
scanf("%d", &N[j][k]);
}
}
printf("#%d\n", i+1);
for(j=0; j<n; j++){
for(k=0; k<n; k++){
printf("%d", N[n-1-k][j]);
}
printf(" ");
for(k=0; k<n; k++){
printf("%d", N[n-1-j][n-1-k]);
}
printf(" ");
for(k=0; k<n; k++){
printf("%d", N[k][n-1-j]);
}
printf("\n");
}
}
return 0;
}
입력 받은 배열 순서(구조)
00 01 02
10 11 12
20 21 22
90도 / 180도 /270도 돌리면
20 10 00 / 22 21 20 / 02 12 22
21 11 01 / 12 11 10 / 01 11 21
22 12 02 / 02 01 00 / 00 10 20
돌린 배열을 한번에 출력하는 게 아니라 세 개를 한줄씩 출력하니까 더 헷갈렸다.
출력할 때 j나 k를 뺄 생각을 왜 못했는지 모르겠다. 저거때문에 변수 만들고 난리쳤었는데...
1)배열 세개 만들어서 돌린 배열들을 저장하고 한줄씩 출력하는 방법과 2)함수를 만들어서 배열을 계속 돌리는 방법을 생각했었는데 둘 다 실패했다. 첫번째 거는 그냥 반복문을 잘못 쓴 거 같은데 다시 짜기가 귀찮다 코드가 길기 때문.,, 함수는 배열을 두번 세번 돌릴때 어떻게 해야 될 지 모르겠다. 한번 돌리고 다른 데에 저장하고 또 함수에 넣어야 하는지? 그리고 이차원 배열을 포인터로 함수에 전달하는 방법을 찾아보긴 했는데 컴파일 오류가 많이 나서 되는지 잘 모르겠다.
옛날엔 이거 어려웠는데 지금보니까 그냥 순서만 잘 생각하면 되는거였네
문제를 문제 그대로 보지말고 구현할 때 어떻게 해야하는지 생각하는 게 중요한 거 같다.
전에는 회전에 집착해서 90도, 180도, 270도 돌린 걸 따로 생각해서 어려웠지만
그냥 출력이 어떻게 되는지 잘 생각해보면 생각보다 쉽게 풀리는 문제였다.
#include <stdio.h>
int main(void) {
int T;
scanf("%d", &T);
for (int test_case = 1; test_case <= T; test_case++) {
int N;
int n[7][7] = { 0 };
scanf("%d", &N);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
scanf("%d", &n[i][j]);
}
}
printf("#%d\n", test_case);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d", n[N - 1 - j][i]);
}
printf(" ");
for (int j = 0; j < N; j++) {
printf("%d", n[N - 1 - i][N - 1 - j]);
}
printf(" ");
for (int j = 0; j < N; j++) {
printf("%d", n[j][N - 1 - i]);
}
printf("\n");
}
}
return 0;
}
'SWEA > [D2]' 카테고리의 다른 글
[C언어] SWEA 1959 두 개의 숫자열 (0) | 2020.08.23 |
---|---|
[C언어] SWEA 1966 숫자를 정렬하자 (0) | 2020.08.20 |
[C언어] SWEA 1204 최빈수 구하기 (0) | 2020.08.15 |
[C언어] SWEA 1284 수도요금경쟁 (0) | 2020.08.15 |
[C언어] SWEA 1970 쉬운 거스름돈 (0) | 2020.08.09 |