티스토리 뷰
반응형
문제 풀이
- 각 배열 연산의 번호를 기준으로 메서드를 생성
- 메서드 내에서 임시 2차원 배열(temp)을 생성
- 입력받은 배열(map)을 이용해 배열 연산을 수행하는데 결과는 temp 배열에 저장
- 연산이 종료되면 Temp 배열을 map 배열에 clone()
- 3, 4번 연산은 90도로 회전해야하는데 이떄 배열을 재정의해야함
- temp 배열을 생성할때 행과 열의 길이값을 바꿔 생성
- static 변수 행의 길이(N), 열의길이(M) 재정의 (N ↔ M)
- 90도 회전 연산 수행
- temp 배열을 map 배열로 clone()
참고 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class 배열돌리기3 {
static int[][] map;
static int N, M;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] split = br.readLine().split(" ");
// 배열 크기
N = Integer.parseInt(split[0]);
M = Integer.parseInt(split[1]);
map = new int[N][M];
// 돌리기 배열
int R = Integer.parseInt(split[2]);
for (int i = 0; i < N; i++) {
map[i] = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
}
String[] turns = br.readLine().split(" ");
for (int i = 0; i < R; i++) {
if (turns[i].charAt(0) == '1') {
turn1();
}
if (turns[i].charAt(0) == '2') {
turn2();
}
if (turns[i].charAt(0) == '3') {
turn3();
}
if (turns[i].charAt(0) == '4') {
turn4();
}
if (turns[i].charAt(0) == '5') {
turn5();
}
if (turns[i].charAt(0) == '6') {
turn6();
}
}
for (int[] ints : map) {
for (int anInt : ints) {
System.out.print(anInt + " ");
}
System.out.println();
}
}
// 상하 반전
static void turn1() {
int[][] temp = new int[map.length][map[0].length];
for (int i = 0; i < N; i++) {
temp[i] = map[N - 1 - i].clone();
}
map = temp.clone();
}
// 좌우 반전
static void turn2() {
int[][] temp = new int[map.length][map[0].length];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
temp[i][j] = map[i][M - 1 - j];
}
}
map = temp.clone();
}
// 오른쪽으로 90도 회전
static void turn3() {
int[][] temp = new int[map[0].length][map.length];
N = temp.length;
M = temp[0].length;
for (int i = 0; i < temp[0].length; i++) {
for (int j = 0; j < temp.length; j++) {
temp[j][temp[0].length - 1 - i] = map[i][j];
}
}
map = temp.clone();
}
// 왼쪽으로 90도 회전
static void turn4() {
int[][] temp = new int[map[0].length][map.length];
N = temp.length;
M = temp[0].length;
for (int i = 0; i < temp[0].length; i++) {
for (int j = 0; j < temp.length; j++) {
temp[temp.length - 1 - j][i] = map[i][j];
}
}
map = temp.clone();
}
// 4개의 부분 배열 시계방향으로 돌리기
static void turn5() {
int[][] temp = new int[map.length][map[0].length];
// 1번 그룹 -> 2번 그룹
for (int i = 0; i < N / 2; i++) {
for (int j = 0; j < M / 2; j++) {
temp[i][M / 2 + j] = map[i][j];
}
}
// 2번 그룹 -> 3번 그룹
for (int i = 0; i < M / 2; i++) {
for (int j = 0; j < N / 2; j++) {
temp[N / 2 + j][M / 2 + i] = map[j][M / 2 + i];
}
}
// 3번 그룹 -> 4번 그룹
for (int i = N / 2; i < N; i++) {
for (int j = 0; j < M / 2; j++) {
temp[i][j] = map[i][M / 2 + j];
}
}
// 4번 그룹 -> 1번 그룹
for (int i = 0; i < M / 2; i++) {
for (int j = 0; j < N / 2; j++) {
temp[j][i] = map[N / 2 + j][i];
}
}
map = temp.clone();
}
static void turn6() {
int[][] temp = new int[map.length][map[0].length];
// 1번 그룹 -> 4번 그룹
for (int i = 0; i < M / 2; i++) {
for (int j = 0; j < N / 2; j++) {
temp[N / 2 + j][i] = map[j][i];
}
}
// 2번 그룹 -> 1번 그룹
for (int i = 0; i < N / 2; i++) {
for (int j = 0; j < M / 2; j++) {
temp[i][j] = map[i][M / 2 + j];
}
}
// 3번 그룹 -> 2번 그룹
for (int i = 0; i < M / 2; i++) {
for (int j = 0; j < N / 2; j++) {
temp[j][M / 2 + i] = map[N / 2 + j][M / 2 + i];
}
}
// 4번 그룹 -> 3번 그룹
for (int i = 0; i < N / 2; i++) {
for (int j = 0; j < M / 2; j++) {
temp[N / 2 + i][M / 2 + j] = map[N / 2 + i][j];
}
}
map = temp.clone();
}
}
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- script
- 개발자취준
- 전자정부프레임워크
- 객체정렬
- BufferedReader
- BFS
- JWT
- 챗봇
- 코딩테스트
- Comparable
- 코드트리
- 항해99
- Spring
- 유데미
- thymeleaf
- BufferedWriter
- 취업리부트코스
- 백준
- springboot
- RASA
- NLU
- 취리코
- 회고록
- Java
- dxdy
- 자바
- 글또
- 나만의챗봇
- Comparator
- 재기동
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
반응형