[SWEA] #1242 암호코드 스캔

KwonSC·2021년 11월 18일
0

SWEA - Java

목록 보기
26/26
post-thumbnail

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15JEKKAM8CFAYD&categoryId=AV15JEKKAM8CFAYD&categoryType=CODE


Code

import java.io.*;
import java.util.*;

public class Solution {
    static int[][] map = new int [2000][2000];
    static int hcode[][] = {
            { 0, 0, 0, 0 },
            { 0, 0, 0, 1 },
            { 0, 0, 1, 0 },
            { 0, 0, 1, 1 },
            { 0, 1, 0, 0 },
            { 0, 1, 0, 1 },
            { 0, 1, 1, 0 },
            { 0, 1, 1, 1 },
            { 1, 0, 0, 0 },
            { 1, 0, 0, 1 },
            { 1, 0, 1, 0 },
            { 1, 0, 1, 1 },
            { 1, 1, 0, 0 },
            { 1, 1, 0, 1 },
            { 1, 1, 1, 0 },
            { 1, 1, 1, 1 }};
    static int [][][] scode = new int [4][3][4];
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), "");
        int TC = Integer.parseInt(st.nextToken());
        scode[1][0][0] = 0;
        scode[1][1][0] = 1;
        scode[0][1][1] = 2;
        scode[3][0][0] = 3;
        scode[0][2][1] = 4;
        scode[1][2][0] = 5;
        scode[0][0][3] = 6;
        scode[2][0][1] = 7;
        scode[1][0][2] = 8;
        scode[0][0][1] = 9;
        for(int tc = 1; tc <= TC; tc++) {
            int N, M;
            int ans = 0;
            st = new StringTokenizer(br.readLine(), " ");
            N = Integer.parseInt(st.nextToken());
            M = Integer.parseInt(st.nextToken());
            for (int i = 0; i < N; i++) {
                st = new StringTokenizer(br.readLine(), "");
                String line = st.nextToken();
                for (int j = 0; j < M; j++) {
                    int t = line.charAt(j);
                    if (t <= '9') t = t - '0';
                    else t = t - 'A' + 10;
                    for (int k = 0; k < 4; k++) {
                        map[i][j * 4 + k] = hcode[t][k];
                    }
                }
            }
            int codei = 7;
            int [] code = new int [8];
            for (int i = 1; i < N; i++) {
                for (int j = M * 4 - 1; j >= 0; j--) {
                    if (map[i][j] == 1 && map[i - 1][j] == 0) {
                        int x, y, z;
                        x = y = z = 0;
                        while (map[i][j] == 1) {
                            z++;
                            j--;
                        }
                        while (map[i][j] == 0) {
                            y++;
                            j--;
                        }
                        while (map[i][j] == 1) {
                            x++;
                            j--;
                        }
                        while (map[i][j] == 1) {
                            j--;
                        }
                        j++;
                        int min = Math.min(Math.min(x, y), z);
                        x /= min;
                        y /= min;
                        z /= min;
                        code[codei--] = scode[x - 1][y - 1][z - 1];
                        if (codei == -1) {
                            int t = (code[0] + code[2] + code[4] + code[6]) * 3 + code[1] + code[3] + code[5] + code[7];
                            if (t % 10 == 0)
                                ans += code[0] + code[2] + code[4] + code[6] + code[1] + code[3] + code[5] + code[7];
                            codei = 7;
                        }
                    }
                }
            }
            System.out.printf("#%d %d\n", tc, ans);
        }
    }
}

Solution

기존에 풀었던 Python 코드를 Java 코드로 옮기려했지만 실패하였다.
그래서 여러 사람들의 코드중 가독성이 좋은jihoon76.lee님의 코드로 해결하였다.
이 문제를 푸는데 너무 시간을 허비하여 다음에 다시 풀어서 제 코드로 포스팅하겠습니다.

0개의 댓글