2차원배열 테트리스 값을 오른쪽으로 돌리는 메서드
처음엔 그냥 한줄씩 돌려 저장하면 될거라고 생각했는데 원래의 값위에 다른값이 저장되고 그 값이 돌아가게 된다면 어떤값은 여러번 나오고 어떤값은 나오지 않는다는 것을 알게 되었다.
그래서 생각한 방법은 새로운 값을 저장하기 전에 원래 있던값을 따로 저장하고 나중에 가져오면 되겠다고 생각하였다.
int Max=k.length-1;
int Min=0;
테트리스의 바깥쪽 부분부터 돌릴거라 최댓값과 최솟값을 가지고 와주었다.
for(int j=0; j<Math.round(Max/2); j++) {
int [] a=new int[k.length];
int [] b=new int[k.length];
int [] c=new int[k.length];
int [] d=new int[k.length];
처음 진행되는 for문은 배열의 길이를 2로 나눈후 반올림 해준 횟수만큼 돌리겠다는 for문이다.
각 제일 바깥쪽의 값들을 저장하기 때문에 2차원 배열의 길이만큼 배열을 선언해 주었다.
for(int i=Min; i<=Max; i++) {
a[i]=k[Min][i];
b[i]=k[i][Max];
c[i]=k[Max][i];
d[i]=k[i][Min];
}
for(int i=0; i<=Max; i++) {
k[i][Max]=a[i];
}
for(int i=0; i<=Max; i++) {
k[Max][Max-i]=b[i];
}
for(int i=0; i<=Max; i++) {
k[i][Min]=c[i];
}
for(int i=0; i<=Max; i++) {
k[Min][Max-i]=d[i];
}
각각의 배열에 2차원 배열의 바깥 값들을 저장해주고
for문을 돌려 오른쪽으로 돌아가게 하였다.
각각의 값이 다음엔 어느배열로 들어가아햐는지 값을 정리하면 조금 편하게 계산할 수 있다.
Min++;
Max--;
for문이 다 돌고나면 그 다음 안쪽 배열을 돌려야 하기때문에 최솟값은 +1, 최댓값은 -1을 해주고 다시 for문이 돌아간다.
public void r_totation(int[][] k) {
int Max=k.length-1;
int Min=0;
for(int j=0; j<Math.round(Max/2); j++) {
int [] a=new int[k.length];
int [] b=new int[k.length];
int [] c=new int[k.length];
int [] d=new int[k.length];
for(int i=Min; i<=Max; i++) {
a[i]=k[Min][i];
b[i]=k[i][Max];
c[i]=k[Max][i];
d[i]=k[i][Min];
}
for(int i=0; i<=Max; i++) {
k[i][Max]=a[i];
}
for(int i=0; i<=Max; i++) {
k[Max][Max-i]=b[i];
}
for(int i=0; i<=Max; i++) {
k[i][Min]=c[i];
}
for(int i=0; i<=Max; i++) {
k[Min][Max-i]=d[i];
}
Min++;
Max--;
}
}
2차원배열에 관한 더 많은 문제들=>
2차원 배열 문제모음