ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 17300번] 패턴 - Java //Wello Horld//
    Algorithm/BOJ(Baekjoon Online Judge) 2019. 7. 9. 20:34

    BOJ의 가장 최신문제인 17300번 패턴을 풀어보자

    일단, 문제가 오지게 길다

    풀어서 설명해 보자면, 안드로이드의 패턴 형식이 적절한지 아닌지 판단하는 문제로, 일단 3X3 으로 구성된 잠금화면이 주어진다. 입력으로 주어지는 수열을 통해 유효한 패턴이면 "YES" 를 아니면 "NO" 를 출력하면 되겠다

    일단 주어진 수가 중복되는지 알려줄 boolean배열인 numberDup, 이전 수를 집어넣을 pre, 답이무엇인지 체크해줄 chk를 먼저 지정해주고, amhoChk(int cur) 이라는 함수를 만들어서 계산을 진행했다. 계산은 정말 하드하게 하나하나 일일이 생각해서 안될경우 될경우 모두 코드로 나타내 주었다... 문제에 관한 생각법 자체를 간단하게 해서 코드가 길어지고 더러워 졌지만, 좀만 다듬으면 많이 짧아질 것 같다

    import java.io.*;
    import java.util.*;
    
    public class sample {
        static boolean[] numberDup;
        static int pre;
        static boolean chk = true;
        public static void main(String[] args) throws Exception {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
            String line = br.readLine();
            int L = Integer.parseInt(line);
            numberDup = new boolean[10];
            StringTokenizer st = new StringTokenizer(br.readLine());
            int cur = Integer.parseInt(st.nextToken());
            numberDup[cur] = true;
            pre = cur;
            for (int i = 1; i < L; i++) {
                cur = Integer.parseInt(st.nextToken());
                amhoChk(cur);
            }
    
            if (chk) {
                bw.write("YES\n");
            } else {
                bw.write("NO\n");
            }
    
            bw.flush();
            br.close();
            bw.close();
        }
        public static void amhoChk(int cur){
            if(cur == 1 && !numberDup[cur]){
                if(pre == 2 ||pre == 4 || pre == 5 ||  pre == 6 || pre == 8){
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 3 && numberDup[2]) {
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 7 && numberDup[4]) {
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 9 && numberDup[5]) {
                    numberDup[cur] = true;
                    pre = cur;
                } else {
                    chk = false;
                }
            } else if(cur == 2 && !numberDup[cur]){
                if(pre == 1 || pre == 3 || pre == 4 || pre == 5 || pre == 6 || pre == 7 || pre == 9){
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 8 && numberDup[5]) {
                    numberDup[cur] = true;
                    pre = cur;
                } else {
                    chk = false;
                }
            } else if(cur == 3 && !numberDup[cur]){
                if(pre == 2 || pre == 5 || pre == 6 || pre == 4 || pre == 8){
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 1 && numberDup[2]) {
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 7 && numberDup[5]) {
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 9 && numberDup[6]) {
                    numberDup[cur] = true;
                    pre = cur;
                }  else {
                    chk = false;
                }
            } else if(cur == 4 && !numberDup[cur]){
                if(pre == 1 || pre == 2 || pre == 3 || pre == 5 || pre == 7 || pre == 8 || pre == 9){
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 6 && numberDup[5]){
                    numberDup[cur] = true;
                    pre = cur;
                } else {
                    chk = false;
                }
            } else if(cur == 5 && !numberDup[cur]){
                if(pre == 1 || pre == 2 || pre == 3 || pre == 4 || pre == 6 || pre == 7 || pre == 8 || pre == 9){
                    numberDup[cur] = true;
                    pre = cur;
                }else {
                    chk = false;
                }
            } else if(cur == 6 && !numberDup[cur]){
                if(pre == 1 || pre == 2 || pre == 3 || pre == 5 || pre == 7 || pre == 8 || pre == 9){
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 4 && numberDup[5]){
                    numberDup[cur] = true;
                    pre = cur;
                } else {
                    chk = false;
                }
            } else if(cur == 7 && !numberDup[cur]){
                if(pre == 2 || pre == 4 || pre == 5 || pre == 6 || pre == 8){
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 1 && numberDup[4]) {
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 3 && numberDup[5]) {
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 9 && numberDup[8]) {
                    numberDup[cur] = true;
                    pre = cur;
                } else {
                    chk = false;
                }
            } else if(cur == 8 && !numberDup[cur]){
                if(pre == 1 || pre == 3 || pre == 4 || pre == 5 || pre == 6 || pre == 7 || pre == 9){
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 2 && numberDup[5]) {
                    numberDup[cur] = true;
                    pre = cur;
                } else {
                    chk = false;
                }
            } else if(cur == 9 && !numberDup[cur]){
                if(pre == 2 || pre == 4 || pre == 8 || pre == 5 || pre == 6){
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 1 && numberDup[5]) {
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 3 && numberDup[6]) {
                    numberDup[cur] = true;
                    pre = cur;
                } else if(pre == 7 && numberDup[8]) {
                    numberDup[cur] = true;
                    pre = cur;
                } else {
                    chk = false;
                }
            } else {
                chk = false;
            }
        }
    }

     

    문제 : https://www.acmicpc.net/problem/17300

Designed by Tistory.