
내가 생각했을때 문제에서 원하는부분
첫줄에는 보낸 문자의 개수(10개 보다 작다.)가 입력된다.
다음 줄에는 문자의 개수의 여섯 배 만큼의 숫자 입력이 주어진다.
주어진 입력에서 지은이가 이해한 문자들을 출력하거나,
모르는 문자가 나오는 경우 그런 것이 처음 나오는 위치를 출력한다.
내가 이 문제를 보고 생각해본 부분
BufferedReader를 사용해서 입력을 받는다.
문제에 주어진 암초를 저장한다.
code는 6자리의 문자이다.
key는 6자리 문자에 해당하는 알파벳이다.
지은이가 보낸 편지를 6자리씩 끊어서 저장한다.
arr는 지은이 편지 속 문자이다.
나올 수 있는 경우의 수를 생각해서 if문 작성했다.
비교 문자열과 완전히 동일할 경우,
비교 문자열과 1개만 다른 경우,
비교 문자열과 2개 이상 다른 경우이다.
1번과 2번에 해당하는 경우 StringBuilder를 사용해 저장해줬다.
3번에 해당하는 경우는 StringBuilder 의 길이를 0으로 설정하여 초기화해줬다.
비교가 끝난 뒤 저장된 값을 StringBuilder.toString() 으로 출력해준다.
코드로 구현
package baekjoon.baekjoon_24;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 2596번 문제
public class Main828 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String arr[] = new String[N];
String str = br.readLine();
String code[] = {"000000", "001111", "010011", "011100", "100110", "101001", "110101", "111010"};
String key[] = {"A", "B", "C", "D", "E", "F", "G", "H"};
for(int i = 0; i < str.length(); i += 6) { // 비밀 편지를 6개씩 끊어서 저장
if(i + 6 > str.length())
break;
arr[i / 6] = str.substring(i, i + 6);
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < N; i++) { // 코드 복호화
boolean flag = true;
for(int j = 0; j < code.length; j++) {
if(code[j].equals(arr[i])) { // 문자열이 완전히 같을 때
sb.append(key[j]); // 알파벳을 추가하고 나간다.
flag = true;
break;
} else { // 문자열이 부분으로 같을 때
int cnt = 0;
for(int z = 0; z < 6; z++) {
if(code[j].charAt(z) != arr[i].charAt(z)) {
if(cnt >= 1) { // 하나 이상 다를 경우
flag = false; // flag 값을 false로 만든다.
break;
}
cnt++; // 다른 문자열이 존재하면 카운트 해준다.
} else { // 같으면 flag 값을 true로 만든다.
flag = true;
}
}
if(flag) { // 문자열을 하나씩 비교했을 때, 1개 빼고 같으면 같은 코드로 관주한다.
sb.append(key[j]);
break;
}
}
}
if(!flag) { // 문자열이 다르다고 판단, 저장한 코드를 초기화 하고 최초 다른 부분의 순서를 출력한다.
sb.setLength(0);
System.out.println(i+1);
break;
}
}
System.out.println(sb.toString()); // 정답 출력
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.