SSAFY/SWEA

[SWEA] 4013 : 특이한 자석

믕비 2023. 5. 4. 19:21

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeV9sKkcoDFAVH 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

list를 사용했고 회전할 자석을 추려낸 후에 list요소들을 방향에 맞게 자리를 바꾸어주었다.

 

내 코드

메모리 : 18604 KB

시간 : 109 ms

코드길이 : 2966 B

 

[내 코드]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Solution {
	static ArrayList<Integer>[] whole;
	static boolean[] canSpin;
	static int[] dirSpin;
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;
		
		
		int T = Integer.parseInt(br.readLine());
		for(int t = 1; t <= T; t++) {
			sb.append('#').append(t).append(' ');
			int K = Integer.parseInt(br.readLine());
			
			whole = new ArrayList[4];
			//0부터 1번자석
			for(int i = 0; i < 4; i++) {
				whole[i] = new ArrayList<Integer>();
			}
			
			st = new StringTokenizer(br.readLine());
			for(int i = 0; i < 8; i++) {
				whole[0].add(Integer.parseInt(st.nextToken()));
			}
			st = new StringTokenizer(br.readLine());
			for(int i = 0; i < 8; i++) {
				whole[1].add(Integer.parseInt(st.nextToken()));
			}
			st = new StringTokenizer(br.readLine());
			for(int i = 0; i < 8; i++) {
				whole[2].add(Integer.parseInt(st.nextToken()));
			}
			st = new StringTokenizer(br.readLine());
			for(int i = 0; i < 8; i++) {
				whole[3].add(Integer.parseInt(st.nextToken()));
			}
			
			for(int k = 0; k < K; k++) {
				st = new StringTokenizer(br.readLine());
				int numOfMagnet = Integer.parseInt(st.nextToken());
				int dir = Integer.parseInt(st.nextToken());
				canSpin = new boolean[4];
				dirSpin = new int[4];
				spin(numOfMagnet - 1, dir);
			}
			
			int result = 0;
			result += (whole[0].get(0) == 0 ? 0 : 1);
			result += (whole[1].get(0) == 0 ? 0 : 2);
			result += (whole[2].get(0) == 0 ? 0 : 4);
			result += (whole[3].get(0) == 0 ? 0 : 8);
			
			sb.append(result).append('\n');
		}
		System.out.print(sb);
	}
	
	public static void spin(int numOfMagnet, int dir) {
		canSpin[numOfMagnet] = true;
		dirSpin[numOfMagnet] = dir;
		//앞번호자석 중 연결된 자석 찾기
		for(int i = numOfMagnet - 1; i >= 0; i--) {
			if(whole[i].get(2) != whole[i + 1].get(6)) {
				canSpin[i] = true;
				dirSpin[i] = dirSpin[i + 1] * -1;
			}
		}
		//뒷번호자석 중 연결된 자석 찾기
		for(int i = numOfMagnet + 1; i < 4; i++) {
			if(whole[i].get(6) != whole[i - 1].get(2)) {
				canSpin[i] = true;
				dirSpin[i] = dirSpin[i - 1] * -1;
			}
		}
		
		for(int i = 0; i < 4; i++) {
			if(canSpin[i])
				change(i, dirSpin[i]);
		}
		
		return;
	}
	
	public static void change(int numOfMagnet, int dir) {
		//시계방향
		if(dir == 1) {
			int temp = whole[numOfMagnet].get(7);
			for(int i = 7; i > 0; i--) {
				whole[numOfMagnet].set(i, whole[numOfMagnet].get(i - 1));
			}
			whole[numOfMagnet].set(0, temp);
		}
		//반시계방향
		else if(dir == -1) {
			int temp = whole[numOfMagnet].get(0);
			for(int i = 1; i < 8; i++) {
				whole[numOfMagnet].set(i - 1, whole[numOfMagnet].get(i));
			}
			whole[numOfMagnet].set(7, temp);
		}
		
		return;
	}
}

 

'SSAFY > SWEA' 카테고리의 다른 글

[SWEA] 3408 : 세가지 합 구하기  (0) 2023.05.05
[SWEA] 8016 : 홀수 피라미드  (0) 2023.05.05
[SWEA] 1952 : 수영장  (0) 2023.05.04
[SWEA] 3750 : Digit sum  (0) 2023.05.03
[SWEA] 11315 : 오목판정  (0) 2023.05.03