に照準を合わせる



総プロセス


友达が立ち上がることができる総数は8です!はい.
これらのすべての状況について、すべての条件が適切かどうかをそれぞれ比較します.
つまり、DFSでずっと友人を配置した後、8人が立っている間に、彼らの配置が条件に合っているかどうかをチェックします.

  • ミラーを任意の数で配置する方法(array()

  • パラメータとして展開を受信し、展開が条件に合致するかどうかを確認する方法(check()
  • final char[] FRIENDS = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
        boolean[] isUsed = new boolean[FRIENDS.length];
        int answer = 0;
        //매번 data를 파라미터로 넘기지 말고 전역변수로
        String[] conditions;
        
        public int solution(int n, String[] data) {
     
            StringBuilder sb = new StringBuilder();
            
            //전역변수 conditions가 data 참조
            conditions = data;
     
            arrange(0, sb);
            
            return answer;
        }//solution() 
        
        public void arrange(int idx, StringBuilder sb) {
            if(idx==FRIENDS.length) {
                //8명 배치 다 됐으면, 조건 검사 통과하면 answer 값 증가
                if(check(sb)) answer++;
                return;
            }//if end
     
            for(int i=0; i<FRIENDS.length; i++) {
                if(!isUsed[i]) {
                    sb.append(FRIENDS[i]);
                    isUsed[i] = true;
                    arrange(idx+1, sb);
                    isUsed[i] = false;
                    //위에 붙인 문자열 제거
                    sb.delete(idx, sb.length());
                }//if end
            }//for end
        }//combination() end
     
        //조건에 맞는지 확인하는 메소드
        public boolean check(StringBuilder sb) {
            String friend1;
            String friend2;
            char operator;
            int gap;
            int realGap;
     
            for (String condition : conditions) {
                friend1 = String.valueOf(condition.charAt(0));
                friend2 = String.valueOf(condition.charAt(2));
                operator = condition.charAt(3);
                //char->int
                gap = condition.charAt(4) - '0';
     
                realGap = Math.abs(sb.indexOf(friend1)-sb.indexOf(friend2))-1;
     
                switch(operator) {
                    case '=' :
                        if(realGap != gap) return false;
                        break;
                    case '<' :
                        if(realGap >= gap) return false;
                        break;
                    case '>' :
                        if(realGap <= gap) return false;
                        break;
                }//switch end
            }//for end
     
            return true;
        }//check() end