반응형
츄르사려고 코딩하는 코집사입니다.
1. [백준 알고리즘] 백준 16926번 배열돌리기1 자바(Java)
1) 문제번호 : 16926번
2) 문제 출처
2. 문제
크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다.
3. 제약사항
- 2 ≤ N, M ≤ 300
- 1 ≤ R ≤ 1,000
- min(N, M) mod 2 = 0
- 1 ≤ Aij ≤ 108
4. 입력
첫째 줄에 배열의 크기 N, M과 수행해야 하는 회전의 수 R이 주어진다.
둘째 줄부터 N개의 줄에 배열 A의 원소 Aij가 주어진다.
5. 출력
입력으로 주어진 배열을 R번 회전시킨 결과를 출력한다.
6. 풀이
- 먼저, 입력 받은 배열에서 돌려야 하는 그룹 개수를 구해야 한다.
- 3*3 배열에서는 1개, 5*5 배열에서는 2개 6*6 배열에서는 3개, 4*5배열에서는 2개를 구하는 방법에서 N과 M 중 최솟값을 찾아 2로 나누면 그룹 개수가 구해진다.
- 그래서 배열 범위를 구하면 되는데, 항상 첫 시작은 (0,0), (1,1), (2,2) ... 이렇게 시작이 된다.
- 즉, group_level에 따라 시작점이 달라지고, N-j, M-j를 통해 다른 범위도 구할 수 있다.
- 범위 내에서 나는 우상좌하 순으로 배열을 돌렸다. 그래서, 맨 처음의 (0,0), (1,1) 등의 값을 따로 저장하여 그 아래칸에 마지막에 넣어줬다.
7. 소스 코드
import java.util.*;
public class Main {
private static int[] dx = {0,1,0,-1};//우상좌하
private static int[] dy = {1,0,-1,0}; //우상좌하
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); //배열크기
int M = sc.nextInt(); //배열크기
int R = sc.nextInt(); //회전 수
int[][] arr = new int[N][M]; //배열 선언
//배열 입력
for(int i=0;i<N;i++) {
for(int j=0;j<M;j++) {
arr[i][j] = sc.nextInt();
}
}
//돌려야하는 그룹 개수
//2*2 행렬에서는 1개, 5*5에서는 2개, 4*5에서는 2개, 최솟값을 2로 나누면 그룹 수가 나온다.
//이 규칙에서 항상 시작점은 x,y값이 같은 값에서 시작
int group_value = Math.min(N, M) / 2;
//회전횟수
for(int i=0;i<R;i++) {
//그룹 갯수만큼 반복
for(int j=0;j<group_value;j++) {
int x = j;
int y = j;
//나중에 값을 넣기 위해 따로 저장
int value = arr[x][y];
int idx=0;// 방향
while(idx<4) {
int nx = x + dx[idx];
int ny = y + dy[idx];
//범위 내에 있을 경우 돌려
if(nx>=j&&ny>=j&&nx<N-j&&ny<M-j) {
arr[x][y] = arr[nx][ny];
x = nx;
y = ny;
}
//범위 벗어나면 방향 전환
else idx++;
}
arr[j+1][j] = value;
}
}
//출력
for(int i=0;i<N;i++) {
for(int j=0;j<M;j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
반응형
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘] 백준 1550번 16진수 자바(Java) (0) | 2021.02.11 |
---|---|
[백준 알고리즘] 백준 1271번 엄청난 부자2 자바(Java) (0) | 2021.02.11 |
[백준 알고리즘] 백준 7568번 덩치 자바(Java) (0) | 2021.02.11 |
[백준 알고리즘] 백준 2161번 카드1 자바(Java) (0) | 2021.02.10 |
[백준 알고리즘] 백준 1991번 트리순회 자바(Java) (0) | 2021.02.10 |
[백준 알고리즘] 백준 2563번 색종이 자바(Java) (0) | 2021.02.09 |
[백준 알고리즘] 백준 1158번 요세푸스 문제 자바(Java) (0) | 2021.02.08 |
[백준 알고리즘] 백준 2309번 일곱 난쟁이 자바(Java) (0) | 2021.02.05 |
최근댓글