알고리즘

[Java] 백준 2784번 가로 세로 퍼즐

J3SUNG 2023. 1. 24. 15:12
728x90

6개의 문자중 3개를 선택하는 조합으로 3줄을 만들고
나머지 3개의 문자가 세로로 존재하는지 확인해주는 방식으로 문제를 해결하였습니다.

Arrays.sort()함수를 통해서 정렬을 해주어서 답이 여러개일 경우 가장 빠른 단어로 나열해주었습니다.

import java.util.*;

public class Main {
  public static void main(String argc[]){
    Scanner sc = new Scanner(System.in);
    String[] arr = new String[6];
    boolean[] visit = new boolean[6];
    boolean[] visit2 = new boolean[3];
    int chk;
    String[] s = new String[3];
    String[] s2 = new String[3];

    for(int i=0; i<6; ++i){
      arr[i] = sc.next();
    }
    Arrays.sort(arr);

    for(int i=0; i<6; ++i){
      visit[i] = true;
      s[0] = arr[i];
      for(int j=0; j<6; ++j){
        if(visit[j]){
          continue;
        }
        s[1] = arr[j];
        visit[j] = true;
        for(int k=0; k<6; ++k){
          if(visit[k]){
            continue;
          }
          visit[k] = true;
          s[2] = arr[k];
          s2[0] = "";
          s2[1] = "";
          s2[2] = "";
          s2[0] += s[0].charAt(0);
          s2[0] += s[1].charAt(0);
          s2[0] += s[2].charAt(0);
          s2[1] += s[0].charAt(1);
          s2[1] += s[1].charAt(1);
          s2[1] += s[2].charAt(1);
          s2[2] += s[0].charAt(2);
          s2[2] += s[1].charAt(2);
          s2[2] += s[2].charAt(2);
          Arrays.sort(s2);
          
          chk = 0;
          visit2[0] = false;
          visit2[1] = false;
          visit2[2] = false;
    
          for(int l=0; l<6; ++l){
            if(visit[l]){
              continue;
            }
            for(int m=0; m<3; ++m){
              if(visit2[m]) {
              	continue;
              }
              if(arr[l].equals(s2[m])){
                visit2[m] = true;
                ++chk;
                break;
              }
            }
          }
          if(chk == 3){
            System.out.printf("%s%n%s%n%s%n", s[0], s[1], s[2]);
            return;
          }
          visit[k] = false;
        }
        visit[j] = false;
      }
      visit[i] = false;
    }
    System.out.printf("0");
  }
}