17276번: 배열 돌리기
각 테스트 케이스에 대해 회전 연산을 마친 후 배열의 상태를 출력한다. n줄에 걸쳐 각 줄에 n개의 정수를 공백으로 구분하여 출력한다.
www.acmicpc.net
의식의 흐름
돌려야하는 줄들만 이동시키면 될 것 같아서 n이랑 i로 표현해보고 대입시켜줬다. 근데 중간에 반대로 집어넣어서 꼬이는 바람에 헤맸다...
풀이
1. 배열의 크기 n과 각도 d 입력 받기
- d가 음수인 경우 360을 더해 양수로 변경함
2. 2차원 배열 2개(originalArr, modifiedArr)를 생성한다.
3. 2차원 배열을 회전
- (d/45)번 45도로 회전
- 한번 회전시킬 때마다 originalArr값을 modifiedArr값으로 변경
코드
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine()); // 테스트케이스 수
while(T>0){
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 배열의 크기
int d = Integer.parseInt(st.nextToken()); // 각도
if(d<0){ // d 음수일 경우 양수로 바꾸기
d += 360;
}
// 초기 배열 입력 받기
int[][] originalArr = new int[n+1][n+1];
int[][] modifiedArr = new int[n+1][n+1];
for(int i=1;i<=n;i++){
st = new StringTokenizer(br.readLine());
for(int j=1;j<=n;j++){
int num = Integer.parseInt(st.nextToken());
originalArr[i][j] = num;
modifiedArr[i][j] = num;
}
}
// 45도씩 돌려주기
for(int k=0;k<d/45;k++) {
for (int i = 1; i <= n; i++) {
modifiedArr[i][(n + 1) / 2] = originalArr[i][i];
modifiedArr[i][n - i + 1] = originalArr[i][(n + 1) / 2];
modifiedArr[(n + 1) / 2][i] = originalArr[n - i + 1][i];
modifiedArr[i][i] = originalArr[(n + 1) / 2][i];
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
originalArr[i][j] = modifiedArr[i][j];
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
bw.write(Integer.toString(modifiedArr[i][j])+" ");
}
bw.write("\n");
}
T--;
}
bw.flush();
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[JAVA] 백준 q3055 - 탈출 (0) | 2023.08.08 |
---|---|
[JAVA] 백준 q11003 - 최솟값 찾기 (0) | 2023.08.08 |
[JAVA] 백준 q1253 - 좋다 (1) | 2023.06.10 |
[JAVA] 백준 q11659 - 구간 합 구하기 4 (0) | 2023.06.10 |
[JAVA] 백준 q1072 - 게임 (0) | 2023.05.01 |