https://swexpertacademy.com/main/main.do
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;
}
}
}
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA] 1213. [S/W 문제해결 기본] 3일차 - String (0) | 2022.11.10 |
---|---|
[SWEA] 1225. [S/W 문제해결 기본] 7일차 - 암호생성기 (0) | 2022.11.10 |
[SWEA] 1216. [S/W 문제해결 기본] 3일차 - 회문2 (0) | 2022.11.10 |
[SWEA] 2805. 농작물 수확하기 (0) | 2022.11.09 |
[SWEA] 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 (0) | 2022.11.09 |