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 |