백준 17276번: 배열 돌리기
문제 설명
- 십자가와 X에 있는 값들을 오른쪽 또는 왼쪽으로 돌려야 합니다.
접근법
- 더미를 이용해 값을 교체합니다.
- 교체가 되지 않는 값들이 존재합니다. 해당 값들을 돌리기를 완료한 뒤 넣어줍니다.
정답
import java.util.*;
public class Main {
static int[][] board;
static int N;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(sc.nextLine());
for (int t = 0; t < T; t++) {
StringTokenizer st = new StringTokenizer(sc.nextLine()," ");
N = Integer.parseInt(st.nextToken());
int rotation = Integer.parseInt(st.nextToken());
int r = rotation/45;
board = new int[N][N];
int[][] original = new int[N][N]; //변하지 않는 값을 채우기 위한 변수입니다.
//초기값 세팅
for (int i = 0; i < N; i++) {
st = new StringTokenizer(sc.nextLine()," ");
for (int j = 0; j < N; j++) {
int val = Integer.parseInt(st.nextToken());
board[i][j] = val;
original[i][j] = val;
}
}
//함수 실행
for (int i = 0; i < Math.abs(r); i++) {
if(rotation>0) {
clockwise();
}else {
counterclockwise();
}
}
//정답을 sb에 넣는다
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(board[i][j] ==0) board[i][j] = original[i][j];
sb.append(board[i][j]+" ");
}
sb.append("\n");
}
}
System.out.println(sb.toString());
}
public static void clockwise() {
int[][] dummy = new int[N][N];
for (int i = 0; i < board.length; i++) {
dummy[i][N/2] = board[i][i];
dummy[i][i] = board[N/2][i];
dummy[N/2][i] = board[N-i-1][i];
dummy[N-i-1][i] = board[N-i-1][N/2];
}
board = dummy;
}
public static void counterclockwise() {
int[][] dummy = new int[N][N];
for (int i = 0; i < board.length; i++) {
dummy[i][N/2] = board[i][N-1-i];
dummy[i][i] = board[i][N/2];
dummy[N/2][i] = board[i][i];
dummy[N-i-1][i] = board[N/2][i];
}
board = dummy;
}
}
Author And Source
이 문제에 관하여(백준 17276번: 배열 돌리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@qwerty1434/백준-17276번-배열-돌리기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)