[백준] 16926번 배열돌리기1 (java)
728x90
반응형
1에서만 가능한 풀이인듯.. 어떻게 할지 고민하느라 손가는 대로 풀었는데 한번에 현재 위치+r에 있는 원소를 가져오는 방법을 강구해야 다음 난이도 문제들이 풀릴 것 같다.
import java.util.Scanner;
public class Main {
static int n,m,r;
static int[][] map;
static int[][] n_map;
static int ypos[]= {1,0,-1,0};
static int xpos[]= {0,1,0,-1};
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
r=sc.nextInt();
map=new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j <m; j++) {
map[i][j]=sc.nextInt();
}
}
for (int i = 0; i < r; i++) {
rotate();
}
for (int i = 0; i < n; i++) {
for (int j = 0; j <m; j++) {
System.out.print(map[i][j]+" ");
}
System.out.println();
}
}
private static void go(int l,int k,int sy,int sx) {
int cnt=0;
int dir=0;
int y=sy;
int x=sx;
int temp=map[y][x];
while(cnt!=2*(l+k)-4) {
int yy=y+ypos[dir];
int xx=x+xpos[dir];
if(yy<sy ||xx<sx || yy>sy+l-1 ||xx>sx+k-1) {
dir=(dir+1)%4;
continue;
}
int temp2=map[yy][xx];
map[yy][xx]=temp;
temp=temp2;
y=yy;
x=xx;
cnt+=1;
}
}
private static void rotate() {
int sx=0; int sy=0;
int n_len=n; int m_len=m;
while(n_len>=2 && m_len>=2) {
go(n_len,m_len,sx++,sy++);
n_len-=2;
m_len-=2;
}
}
}
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 17406. 배열돌리기4 (JAVA) (0) | 2021.02.10 |
---|---|
[백준] 16935번 배열돌리기3 (JAVA, C++) (0) | 2021.02.10 |
[백준] 1592번 영식이와 친구들 (java) (0) | 2021.02.09 |
[백준] 2563번 색종이 (java) (0) | 2021.02.09 |
[백준] 1158번 요세푸스 (java) (0) | 2021.02.09 |
TAGS.