S E P H ' S

[Java] 단체사진 찍기 본문

Algorithm/Programmers

[Java] 단체사진 찍기

yoseph0310 2023. 4. 14. 14:54

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

 

문제를 보자마자 조합이구나가 떠오른게 많이 발전한 것 같다. 조금 어려웠던 점은 data에 주어지는 조건에 맞도록 어떻게 조합을 맞춰나가야 하는지가 잘 떠오르지 않았다. 그래서 가능한 조합을 모두 만든 다음, 그 조합이 data에 주어지는 조건에 부합하는지 확인하도록 했다. 또한 조건에 부합하는 조합이 없다면 0을 출력해야한다. answer를 0으로 초기화 해두고 모든 조건을 확인하고도 answer의 증가가 일어나지 않으면 조건에 맞는 것이 없는 것이다. 그대로 코드를 작성해서 통과할 수 있었다.

 

class Solution {
    int answer = 0;
    String[] friends = {"A", "C", "F", "J", "M", "N", "R", "T"};
    
    public int solution(int n, String[] data) {
        boolean[] visited = new boolean[8];
        dfs("", visited, data);
        return answer;
    }
    
    void dfs(String names, boolean[] visited, String[] datas) {
        // name 길이가 7이 되면 검사 준비 완료
        if (names.length() == 8) {
            // 만들어진 names가 datas의 조건을 충족하는지 확인
            if (check(names, datas)) {
                answer++;
            }
            return;
        }
        
        for (int i = 0; i < 8; i++) {
            if (!visited[i]) {
                visited[i] = true;
                String name = names + friends[i];
                dfs(name, visited, datas);
                visited[i] = false;
            }
        }
    }
    
    boolean check(String name, String[] datas) {
        for (String data : datas) {
            int pos1 = name.indexOf(data.charAt(0));
            int pos2 = name.indexOf(data.charAt(2));
            
            char op = data.charAt(3);
            int index = data.charAt(4) - '0';
            
            int dist = Math.abs(pos1 - pos2);
            
            if (op == '=') {
                if (!(dist == index + 1)) return false;
            } else if (op == '<') {
                if (!(dist < index + 1)) return false;
            } else if (op == '>') {
                if (!(dist > index + 1)) return false;
            }
            
        }
        return true;
    }
}

 

'Algorithm > Programmers' 카테고리의 다른 글

[Java] 조이스틱  (0) 2023.04.28
[Java] 주식가격  (0) 2023.04.25
[Java] 2 x n 타일링  (0) 2023.04.13
[Python] n^2 배열 자르기  (0) 2021.12.15
[Python] 가장 긴 팰린드롬  (0) 2021.09.09