코드굽는 타자기
SWEA[1240] - 단순 2진 암호코드[D3] 본문
링크
SWEA[1240]
문제설명
- 시뮬
문제풀이
- 시뮬
문제코드
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution1240 {
public static void main(String args[]) throws Exception
{
System.setIn(new FileInputStream("res/swea/1240.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T;
T=Integer.parseInt(br.readLine().trim());
for(int test_case = 1; test_case <= T; test_case++)
{
int ans=0;
StringTokenizer st = new StringTokenizer(br.readLine().trim()," ");
int N=Integer.parseInt(st.nextToken());
int M=Integer.parseInt(st.nextToken());
StringBuilder[] code = new StringBuilder[N];
for (int i = 0; i < N; i++) {
code[i] = new StringBuilder(br.readLine());
}
int [] decode = new int[8];
// decode 시작점 찾기
int si=0;
int sj=0;
top:
for (int i = 0; i < N; i++) {
for (int j = 0; j < M-14; j++) {
String num = code[i].substring(j,j+7);
String num2 = code[i].substring(j+7,j+14);
if( (num.equals("0001101") ||
num.equals("0011001") ||
num.equals("0010011") ||
num.equals("0111101") ||
num.equals("0100011") ||
num.equals("0110001") ||
num.equals("0101111") ||
num.equals("0111011") ||
num.equals("0110111") ||
num.equals("0001011")) &&
(num2.equals("0001101") ||
num2.equals("0011001") ||
num2.equals("0010011") ||
num2.equals("0111101") ||
num2.equals("0100011") ||
num2.equals("0110001") ||
num2.equals("0101111") ||
num2.equals("0111011") ||
num2.equals("0110111") ||
num2.equals("0001011"))) {
si=i;
sj=j;
break top;
}
}
}
for (int m = 0; m < 8; m++) {
String num = code[si].substring(sj+m*7, sj+(m+1)*7);
if(num.equals("0001101")) {
decode[m]=0;
}else if(num.equals("0011001")) {
decode[m]=1;
}else if(num.equals("0010011")) {
decode[m]=2;
}else if(num.equals("0111101")) {
decode[m]=3;
}else if(num.equals("0100011")) {
decode[m]=4;
}else if(num.equals("0110001")) {
decode[m]=5;
}else if(num.equals("0101111")) {
decode[m]=6;
}else if(num.equals("0111011")) {
decode[m]=7;
}else if(num.equals("0110111")) {
decode[m]=8;
}else if(num.equals("0001011")) {
decode[m]=9;
}
else {
decode[m]=-1;
}
}
int gum=0;
gum = (decode[0] + decode[2] + decode[4] + decode[6])*3
+ decode[1] + decode[3] + decode[5] + decode[7];
if(gum%10==0) {
for (int k = 0; k < 8; k++) {
ans+=decode[k];
}
}
System.out.println("#"+test_case+" "+ans);
}
}
}
아쉬운점
- 7번째 테케
- 000001011110을 앞에서 체크해보면
- 9:0001011
- 6:0101111 둘다 가능
- 2칸 검사해야함
잘한점
- 구현
다른 풀이
- 0과 1 갯수의 비율 1:3:2:1 같은 경우 뒤에 3개만 가지고 식별가능
- lastIndexOf 메서드 사용하면 뒤에서부터 검사 가능
'알고리즘 > Simulation' 카테고리의 다른 글
SWEA[5650] - 핀볼 게임 (0) | 2020.02.19 |
---|---|
SWEA[5656] - 벽돌 깨기 (1) | 2020.02.19 |
SWEA[1211] - Ladder2[D4] (0) | 2020.02.17 |
SWEA[1210] - Ladder1[D4] (0) | 2020.02.17 |
SWEA[2382] - 미생물 격리 (0) | 2020.02.14 |
Comments