[SWEA] 1240. 단순 2진 암호코드

김휴지 ㅣ 2023. 5. 17. 20:38

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

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

swexpertacademy.com


접근 방법

장황한 설명에 아찔했지만, 생각보다 큰 배열이 필요없었다.

HashMap을 사용해서 주어진 코드를 저장하고

코드 규칙이 뒷자리 수가 항상 1이라는 점, 0은 최대 3개까지 연속된다는 점을 이용해 핵심 코드만 남겨서 풀었다.

 

소스 코드

import java.util.*;
import java.io.*;
 
class Solution
{
    public static void main(String args[]) throws Exception
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.valueOf(br.readLine());
         
        Map<String, Integer> map = new HashMap<>();
        map.put("0001101", 0); map.put("0011001", 1);
        map.put("0010011", 2); map.put("0111101", 3);
        map.put("0100011", 4); map.put("0110001", 5);
        map.put("0101111", 6); map.put("0111011", 7);
        map.put("0110111", 8); map.put("0001011", 9);
         
        for(int test_case = 1; test_case <= T; test_case++)
        {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            int N = Integer.valueOf(st.nextToken());
            int M = Integer.valueOf(st.nextToken());
            String line = "";
            int result = 0;
             
            for(int i=0; i<N; i++) {
                String str = br.readLine();
                if(!str.substring(M/2-2,M/2+2).equals("0000"))
                    line = str;
            }
             
            int idx = line.lastIndexOf("1");
             
            int odd = 0, even = 0;
            for(int i=0; i<8; i++) {
                String codes = line.substring(idx-6-7*i, idx+1-7*i);
                if((i+2)%2==0)
                    even += map.get(codes);
                else
                    odd += map.get(codes);
                result = (odd * 3 + even)%10 == 0 ? (odd + even) : 0;
            }
            System.out.println("#" + test_case + " " + result);
        }
    }
}

 

'코테 > 자바' 카테고리의 다른 글

[SWEA] 1244. 최대 상금  (0) 2023.05.18
[SWEA] 2814. 최장 경로  (0) 2023.05.17
[SWEA] 1209. Sum  (0) 2023.05.17
[SWEA] 1208. Flatten  (0) 2023.05.17
[SWEA] 1206. View  (0) 2023.05.17