알고리즘/SWEA

[SWEA] 1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드

Ellie67 2022. 11. 10. 18:20

https://swexpertacademy.com/main/main.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

SWEA 1240

 

[접근 방식]

뒤에서 부터 1을 찾는다. 찾은 1의 인덱스 => str.lastIndexOf("1")

따라서 위에서 찾은 인덱스 번호 앞 55개 문자들이 암호코드라고 할 수 있음

총 56개 문자들을 7개씩 쪼개서 아래 배열과 비교해 숫자를 찾는다.

 

0~9를 아래와 같이 표현해놨다.

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

 

import java.util.Scanner;

public class P1240 {
    static String[] NUM = {"0001101","0011001","0010011","0111101",
            "0100011","0110001","0101111","0111011","0110111",
            "0001011"};
    static int[] ch;
    static int ans;
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        for(int t=1; t<=T; t++){
            int n = sc.nextInt();
            int m = sc.nextInt();

            ch = new int[8]; // 해석한 코드 넣을 배열
            boolean flag = true; // 본 줄 체크
            ans = 0;
            for(int i=0; i<n; i++){
                String str = sc.next();
                int last_idx = str.lastIndexOf("1"); // 끝에서 1 처음 발견한 인덱스

                if(last_idx==-1 || !flag){ // 1이 없으면 넘어감
                    continue;
                } else {
                    flag = false;
                    str = str.substring(last_idx-55, last_idx+1);
                    for(int j=0; j<8; j++){
                        String tmp = str.substring(j*7,j*7+7);
                        for(int k=0; k<10; k++){
                            if(NUM[k].equals(tmp)){
                                ch[j] = k;
                            }
                        }
                    }
                    check();
                    System.out.println("#"+t+" "+ans);
                }
            }
        }
    }
    public static void check(){
        int code = ((ch[0]+ch[2]+ch[4]+ch[6])*3)+ch[1]+ch[3]+ch[5]+ch[7];
        if(code%10==0 && code>0){
            for(int k=0; k<8; k++){
                ans += ch[k];
            }
        } else {
            ans = 0;
        }
    }
}