요깨비's LAB

[프로그래머스, JAVA] 단체사진 찍기 본문

알고리즘(Java)/프로그래머스

[프로그래머스, JAVA] 단체사진 찍기

요깨비 2021. 6. 5. 16:47

 

import java.util.HashMap;
import java.util.Map;

class Solution {
    static boolean[] isVisited = new boolean[8];
    static String[] characters = {"A", "C", "F", "J", "M", "N", "R", "T"};
    static int result = 0;

    public int solution(int n, String[] data) {
        int answer = 0;
        result = 0;

        for (int i = 0; i < 8; i++) {
            Map<String, Integer> map = new HashMap<>();
            isVisited[i] = true;
            int index = 0;
            map.put(characters[i], index);
            createLine(data, map, index + 1);
            map.remove(characters[i]);
            isVisited[i] = false;
        }
        answer = result;

        return answer;
    }

    public void createLine(String[] data, Map<String, Integer> map, int index) {
        if (index == 8) {
            if(check(data,map)) {
                result++;
            }
            return;
        }

        for (int i = 0; i < 8; i++) {
            if (isVisited[i])
                continue;
            else {
                isVisited[i] = true;
                map.put(characters[i], index);
                createLine(data, map, index + 1);
                map.remove(characters[i]);
                isVisited[i] = false;
            }
        }
    }

    public boolean check(String[] data, Map<String, Integer> map) {
        for (String element : data) {
            String[] splitedElements = element.split("");
            int pow = Math.abs(map.get(splitedElements[0]) - map.get(splitedElements[2]));

            if (splitedElements[3].equals("=")) {
                if(pow != Integer.valueOf(splitedElements[4]) + 1) {
                    return false;
                }
            } else if (splitedElements[3].equals("<")) {
                if(pow >= Integer.valueOf(splitedElements[4]) + 1) {
                    return false;
                }
            } else if (splitedElements[3].equals(">")) {
                if(pow <= Integer.valueOf(splitedElements[4]) + 1) {
                    return false;
                }
            }
        }

        return true;
    }
}

이 문제를 풀면서 한가지 의문점이 있습니다. 혹시 보시다가 아시는분 있으시면 댓글로 알려주시면 정말 감사드리겠습니다.
이 코드에서 static int reuslt = 0;으로 초기화해주고 그대로 제출하면 계속 틀렸다고 떴습니다. 아무리 봐도
해당 로직은 문제가 없어보여서 프로그래머스 질문하기에서 확인한 결과, 

그래서 위 코드와 같이 solution함수에서 다시한번 result = 0으로 초기화해준다음 제출하였더니 해당 코드는 맞았습니다.

... 다른 문제들은 딱히 solution내부에서 다시 초기화 해주지 않아도 맞았었는데 이문제는 왜 이렇게 해야하는지 아시는 분 계시면
알려주시면 정말 감사하겠습니다.

Comments