ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SW Expert Academy] 4013. 특이한 자석
    Source Code/Coding 2022. 8. 27. 12:50
    반응형

    Solution.java

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class Solution {
    	static int [][] mag;
    	static int [] tmp;
    	public static void main(String[] args) throws IOException {
    		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    		StringTokenizer st;
    		int T = Integer.parseInt(bf.readLine()); // test case
    		
    		for(int tc=1;tc<=T;tc++) {
    			int K = Integer.parseInt(bf.readLine()); // 회전 시키려는 횟수
    			
    			mag = new int[4][8]; // 자석 상태
    			for(int i=0;i<4;i++) { // 4개의 자석
    				st = new StringTokenizer(bf.readLine()," ");
    				for(int j=0;j<8;j++) { // 8 개의 날
    					mag[i][j] = Integer.parseInt(st.nextToken());
    				}
    			}
    			
    			// 1 시계 방향 -1 반시계
    			for(int k=0;k<K;k++) {
    				st = new StringTokenizer(bf.readLine()," ");
    				tmp = new int[4]; // 자석 번호
    				int idx = Integer.parseInt(st.nextToken())-1; // 자석 번호 인덱스 맞춤
    				int dir = Integer.parseInt(st.nextToken()); // 회전 방향
    				rotate(idx, dir);
    			} // 입력 완료
    			
    			int score = 0; //획득한 점수
    			if(mag[0][0]==1) score += 1; // 1번 점수
    			if(mag[1][0]==1) score += 2; // 2번 점수
    			if(mag[2][0]==1) score += 4; // 3번  점수
    			if(mag[3][0]==1) score += 8; // 4번 점수
    			System.out.println("#"+tc+" "+score);
    			
    		} // test case end
    	} // main end
    
    	private static void rotate(int idx, int dir) {
    		tmp[idx] = dir; // 현재 자석의 어느 방향으로 회전해야하는 지
    		
    		// 오른쪽
    		for(int i=idx+1;i<4;i++) {
    			if(mag[i][6]==mag[i-1][2]) break;
    			else tmp[i] -= tmp[i-1];
    		}
    		
    		// 왼쪽
    		for(int i=idx-1;i>=0;i--) {
    			if(mag[i+1][6] == mag[i][2]) break;
    			else tmp[i] -= tmp[i+1];
    		}
    		
    		// 회전
    		for(int i=0;i<4;i++) {
    			// 회전 방향 x
    			if(tmp[i]==0) continue;
    			
    			// 시계 방향
    			else if(tmp[i]==1) {
    				int end = mag[i][7];
    				for(int j=7;j>0;j--) {
    					mag[i][j] = mag[i][j-1];
    				}
    				mag[i][0] = end;
    			}
    			
    			// 반시계 방향
    			else if(tmp[i]==-1) {
    				int first = mag[i][0];
    				for(int j=0;j<7;j++) {
    					mag[i][j] = mag[i][j+1];
    				}
    				mag[i][7] = first;
    			}
    			
    		}
    	} // rotate end
    }
    반응형

    댓글

Designed by SooJI