반응형
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 |