-
[SWEA] 특이한 자석Algorithm/SWEA 2020. 2. 21. 23:56
[4013] 특이한 자석
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeV9sKkcoDFAVH
- 하나의 자석이 1 칸 회전될 때, 붙어 있는 자석은 서로 붙어 있는 날의 자성과 다를 경우에만 반대방향으로 1 칸 회전한다.
- 자석을 회전시키는 방향은 시계 방향이 1, 반시계 방향이 -1로 주어진다.
- 날의 자성은 N 극이 0으로, S 극이 1로 주어진다.
- 각 자석의 날 자성정보는 12시방향부터 시계방향으로 순서대로 주어진다.
- 정답은 K번 회전한 후 획득한 점수의 총 합이다.
Solution
- LinkedList를 활용해서 시계방향, 반시계방향을 구현하였다.
- 먼저 왼쪽과 오른쪽의 자석이 회전하는지(자성이 다른지) 확인한 후에 재귀를 사용해서 돌아가도록 했고, 마지막에 자신을 주어진 방향에 따라 회전하도록 구현했다.
- 한 번의 회전에서 각각의 자석들이 한 번씩만 돌아갈 수 있도록 boolean[] c 배열로 체크했다.
소스코드
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172import java.io.IOException;import java.util.LinkedList;import java.util.Scanner;public class Main {static int k, n, dir, target;static boolean[] c;static LinkedList<Integer>[] arr;public static void main(String[] args) throws IOException {Scanner sc = new Scanner(System.in);int tc = sc.nextInt();for (int tn = 1; tn <= tc; tn++) {k = sc.nextInt();arr = new LinkedList[4];for (int i = 0; i < 4; i++) {arr[i] = new LinkedList<>();for (int j = 0; j < 8; j++) {arr[i].add(sc.nextInt());}}while (k-- > 0) {target = sc.nextInt() - 1;dir = sc.nextInt();c = new boolean[4];simulation(target, dir);}int answer = 0;for (int i = 0; i < 4; i++) {if (arr[i].get(0) == 1) {answer += (Math.pow(2, i));}}System.out.println("#" + tn + " " + answer);}}public static void simulation(int target, int dir) {c[target] = true;int left = target - 1;int right = target + 1;int r = (dir == 1) ? -1 : 1;if (left >= 0 && !c[left]) {// 자성이 다르면if (arr[left].get(2) != arr[target].get(6)) {simulation(left, r);}}if (right <= 3 && !c[right]) {// 자성이 다르면if (arr[target].get(2) != arr[right].get(6)) {simulation(right, r);}}// 자기자신 회전if (dir == 1) {int tail = arr[target].removeLast();arr[target].addFirst(tail);} else {int head = arr[target].removeFirst();arr[target].addLast(head);}return;}}cs dsfs
'Algorithm > SWEA' 카테고리의 다른 글
[SWEA] 진용이네 주차타워 (0) 2020.04.05 [SWEA] 탈주범 검거 (0) 2020.03.03 [SWEA] 올해의 조련사 (0) 2020.02.18 [SWEA] 수영장 (0) 2020.02.15 SW 역량 테스트 준비 - 연습 (0) 2020.02.03