SWEA 1240 단순 이진 암호코드

이상민·2023년 10월 26일
0

알고리즘

목록 보기
81/128
import java.util.Arrays;
import java.util.Scanner;

public class SimpleBinaryCode {
    static int N,M;

    static String[] code = { "0001101",
            "0011001",
            "0010011",
            "0111101",
            "0100011",
            "0110001",
            "0101111",
            "0111011",
            "0110111",
            "0001011"};

    public static void main(String args[]) throws Exception
    {
        Scanner sc = new Scanner(System.in);
        int T;
        T=sc.nextInt();

        for(int test_case = 1; test_case <= T; test_case++)
        {
            N = sc.nextInt();
            M = sc.nextInt();
            String inputCode = "";
            boolean flag = false;
            for(int i = 0; i<N; i++){
                String str = sc.next();
                for(int j = M-1 ; j>=0; j--){
                    int c = str.charAt(j)-'0';
                    if(!flag && c == 1){
                        inputCode = str.substring(j-55,j+1);
                        flag = true;
                    }
                }
            }

            int num = 0;
            int[] inputnum = new int[8];
            for(int i = 0; i<8; i++){
                String str = inputCode.substring(num,num+7);
                num += 7;
                System.out.println(str);
                for(int j = 0; j<10; j++){
                    if(str.equals(code[j])){
                        inputnum[i] = j;
                    }
                }
            }
            System.out.println(Arrays.toString(inputnum));
            int answer = 0;
            int odd = 0;
            for(int i = 0; i<8; i++){
                if((i+1)%2==1){
                    odd += inputnum[i];
                }
                else{
                    answer += inputnum[i];
                }
            }
            answer += odd*3;
            int output = 0;
            for (int i = 0; i < 8; i++) {
                output +=inputnum[i];
            }
            if(answer%10==0) System.out.println("#" +test_case+" " +output);
            else System.out.println("#" +test_case+" " +0);

        }
    }
}

풀이 방법

  1. 문제의 조건에 따라 이진코드별 매칭할 code를 사전에 선언한다.
  2. 한줄씩 입력받는데, 한행마다 끝에서부터 한글자씩 비교하여 1이 나오는 지점을 찾고, 그 지점부터 7개씩 끊어서 총 8개의 이진코드가 이어진 문자열을 inputCode에 저장한다.
  3. inputCode 안에서 7개씩 다시 끊어서 비교하는데 사전에 선언한 code와 매칭되는 이진코드를 찾고, 그 수를 inputnum에 넣어 준다.
  4. 홀수번째 수는 *3 해서 answer에 넣고, 짝수번째 수는 그대로 answer에 넣어준다.
  5. 10으로 나누어 떨어진다면, inputnum을 다 더한 output 값을 출력한다.
profile
개린이

0개의 댓글