https://www.acmicpc.net/problem/2469
단순구현 문제였다.. 좀더 간단하게 구현하고 싶었는데 그게 잘 안되네
첫번째 샘플문제를 예로 들자면
ACGBEDJFIH 문자열을 사다리에서
위에서 아래로 내려가면서 "-" 이면 글자 스위칭 해주고
? 문자열에서 멈춘다
ABCDEFGHIJ 문자열을 사다리에서
밑에서 위로 올라가면서 "-" 이면 글자 스위칭 해주고 ? 문자열에서 멈춘다 그러면 위의 그림같은 결과가 나온다
두개의 문자열을 비교하면서 스위칭된 거는 출력을 "-" 로 해주고 그렇지 않은건 "*" 출력하였다
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int k = Integer.parseInt(br.readLine());//사람수 3 ~ 26
int n = Integer.parseInt(br.readLine());//가로줄 3~1000
String[] input;
input = input = br.readLine().split("");
char[] end = new char[k];
for (int i = 0; i < input.length; i++) {
end[i] = input[i].charAt(0);
}
char[] start = new char[k];
for (int i = 0; i < k; i++) {
start[i] = (char)('A'+i);
}
int[][] lines = new int[n][k-1];
for (int i = 0; i < n; i++) {
input = br.readLine().split("");
for (int j = 0; j < k-1; j++) {
if(input[j].equals("*")){
lines[i][j] = 0;
}else if(input[j].equals("-")){
lines[i][j] = 1;
}else{
lines[i][j] = 2;
}
}
}
boolean finish = false;
for (int i = 0; i < n; i++) {
for (int j = 0; j < k-1; j++) {
if(lines[i][j] == 1){
char temp = start[j];
start[j] = start[j+1];
start[j+1] = temp;
}else if(lines[i][j] == 2){
finish = true;
break;
}
}
if(finish)
break;
}
finish = false;
for (int i = n-1; i >= 0; i--) {
for (int j = 0; j < k-1; j++) {
if(lines[i][j] == 1){
char temp = end[j];
end[j] = end[j+1];
end[j+1] = temp;
}else if(lines[i][j] == 2){
finish = true;
break;
}
}
if(finish)
break;
}
StringBuilder sb = new StringBuilder();
boolean impossible = false;
for (int i = 0; i < k-1; i++) {
if (start[i] == end[i + 1] && start[i+1] == end[i]) {
sb.append("-");
}else if(start[i] == end[i] || (i > 0 && start[i] == end[i-1] && start[i-1] == end[i]))
sb.append("*");
else{
impossible = true;
}
}
if(impossible){
sb.setLength(0);
for (int i = 0; i < k - 1; i++) {
sb.append("x");
}
}
System.out.println(sb.toString());
}
}