반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/1835

 

코딩테스트 연습 - 단체사진 찍기

단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두

programmers.co.kr

 

풀이

 

 

class Solution {

    char[] chars = new char[]{'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
    int[] visit = new int[chars.length];
    String str = "";
    String[] data;
    int answer = 0;

    public int solution(int n, String[] data) {
        this.data = data;
        setStr(0);
        return answer;
    }

    private void setStr(int n) {
        if (n == chars.length) {
            if (check())
                ++answer;
            return;
        }

        for (int i = 0; i < chars.length; ++i) {
            if (visit[i] == 1) continue;
            visit[i] = 1;
            str += chars[i];
            setStr(n + 1);
            visit[i] = 0;
            str = str.substring(0, str.length() - 1);
        }
    }

    private boolean check() {
        for (String condition : data) {
            int idx1 = str.indexOf(condition.charAt(0));
            int idx2 = str.indexOf(condition.charAt(2));
            int diff = Math.abs(idx1 - idx2) - 1;
            char op = condition.charAt(3);
            int limit = Integer.parseInt(condition.charAt(4) + "");
            switch (op) {
                case '=':
                    if (diff != limit) return false;
                    break;
                case '<':
                    if (diff >= limit) return false;
                    break;
                case '>':
                    if (diff <= limit) return false;
                    break;
            }
        }
        return true;
    }


}
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기