반응형
풀이
처음 스택을 쓰려고 했는데 엄청 복잡했습니다...
그래서 2차원 배열을 통해 구현했습니다.
map 4x8 2차원 형태로 저장하구 , arr에 시계면 1, 반시계면 -1, 회전 하지않는다면 0 으로 담았습니다.
받은 인덱스 값을 바탕으로 왼쪽,오른쪽을 나눈 뒤
오른쪽일 땐, map[idx][6]번과 map[idx-1][2] 을 비교해준 뒤 값을 arr 를 넣어주고
왼쪽도 비슷한 로직으로 arr 넣어줍니다.
arr를 기준으로
시계,반시계로 돌려줍니다
시계방향은 끝에 있는 값을 처음으로 넣어줍니다.
반시계방향은 처음 값을 마지막으로 넣어줍니다.
풀이 완료!!
import java.io.*;
import java.util.*;
public class Solution {
static int[][] map;
static int[] arr;
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int tc=Integer.parseInt(br.readLine());
for(int t=1 ; t<=tc ; t++) {
map = new int[4][8];
int k= Integer.parseInt(br.readLine());
for(int i=0; i<4; i++) {
st=new StringTokenizer(br.readLine());
for(int j=0; j<8; j++) {
map[i][j]=Integer.parseInt(st.nextToken());
}
}
for(int i=0; i<k ; i++) {
arr= new int[4];
st = new StringTokenizer(br.readLine(), " ");
int idx =Integer.parseInt(st.nextToken())-1;
int dir=Integer.parseInt(st.nextToken());
do_rotate(idx,dir);
}
int total=0;
if(map[0][0]==1) total+=1;
if(map[1][0]==1) total+=2;
if(map[2][0]==1) total+=4;
if(map[3][0]==1) total+=8;
System.out.println("#"+t+" "+total);
}
}
private static void do_rotate(int idx, int dir) {
// TODO Auto-generated method stub
arr[idx]=dir;
// 오른쪽
for(int i=idx+1 ; i<4 ; i++) {
if(map[i][6]==map[i-1][2]) {
break;
}
else arr[i]= -arr[i-1];
}
//왼쪽
for(int i=idx-1 ; i>=0 ; i--) {
if(map[i+1][6] == map[i][2]) {
break;
}
else arr[i] = -arr[i+1];
}
// 돌리기
for(int i=0; i<4; i++) {
if(arr[i]==0) continue;
// 시계
else if(arr[i] == 1) {
int tmp=map[i][7];
for(int j=7 ; j>0 ;j--) {
map[i][j]=map[i][j-1];
}
map[i][0]=tmp;
}
// 반시계
else if(arr[i] == -1) {
int tmp=map[i][0];
for(int j=0; j<7 ; j++) {
map[i][j]=map[i][j+1];
}
map[i][7]=tmp;
}
}
}
}
인덱스 값을 헷갈리지 않게 조심합시다!!
반응형
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[Java/자바 swea 5648] 원자 소멸 시뮬레이션 (0) | 2021.10.13 |
---|---|
[Java/자바 swea 5653] 줄기세포배양 (0) | 2021.10.11 |
[Java/자바 swea 1868] 파핑파핑 지뢰찾기 (0) | 2021.10.01 |
[Java/자바 swea 5643] 키 순서 (0) | 2021.09.30 |
[Java/자바 swea 8458] 원점으로 집합 (0) | 2021.09.29 |