사다리 타기 2469

LJM·2023년 7월 27일
0

백준풀기

목록 보기
205/259

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());
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글