ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SWEA] 특이한 자석
    Algorithm/SWEA 2020. 11. 30. 18:58

    +) 이전 풀이

    4ngeunlee.tistory.com/228

     

    [SWEA] 특이한 자석

    [4013] 특이한 자석 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeV9sKkcoDFAVH 하나의 자석이 1 칸 회전될 때, 붙어 있는 자석은 서로 붙어 있는 날의 자성과 다를 경우에..

    4ngeunlee.tistory.com

     

    소스코드

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.*;
     
    public class Main {
        static String[] magnets;
        static boolean[] flag;
     
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int k;
            int T = stoi(br.readLine());
            for (int tc = 1; tc <= T; tc++) {
                k = stoi(br.readLine());
     
                flag = new boolean[5];
                magnets = new String[5];
                StringTokenizer st;
                StringBuilder sb;
                for (int i = 1; i < magnets.length; i++) {
                    st = new StringTokenizer(br.readLine().trim());
                    sb = new StringBuilder();
                    while (st.hasMoreTokens()) {
                        sb.append(st.nextToken());
                    }
                    magnets[i] = sb.toString();
                }
     
                int n, dir;
                for (int i = 0; i < k; i++) {
                    st = new StringTokenizer(br.readLine());
                    n = stoi(st.nextToken());
                    dir = stoi(st.nextToken());
     
                    Arrays.fill(flag, false);
                    simulation(n, dir);
                }
     
                int answer = 0;
                for (int i = 1; i < magnets.length; i++) {
                    if (magnets[i].charAt(0== '1') {
                        answer += Math.pow(2, i-1);
                    }
                }
                System.out.println("#" + tc + " " + answer);
            }
        }
     
        private static void simulation(int n, int dir) {
            if (flag[n]) return;
            flag[n] = true;
            char left = magnets[n].charAt(6);
            char right = magnets[n].charAt(2);
            rotate(n, dir);
            dir = (dir == 1) ? -1 : 1;
            if (n > 1 && magnets[n - 1].charAt(2!= left) {
                simulation(n - 1, dir);
            }
            if (n < 4 && magnets[n + 1].charAt(6!= right) {
                simulation(n + 1, dir);
            }
        }
     
        private static void rotate(int n, int dir) {
            StringBuilder sb;
            if (dir == 1) {
                sb = new StringBuilder();
                sb.append(magnets[n].charAt(7));
                sb.append(magnets[n].substring(07));
            } else {
                sb = new StringBuilder(magnets[n].substring(1));
                sb.append(magnets[n].charAt(0));
            }
            magnets[n] = sb.toString();
        }
     
        private static int stoi(String s) {
            return Integer.parseInt(s);
        }
    }
     
    cs

    댓글

Designed by Tistory.