코드를 느껴바라

Lv.2 단체사진 찍기 [JAVA] 본문

PS/프로그래머스(Programmers)

Lv.2 단체사진 찍기 [JAVA]

feelTheCode 2025. 3. 15. 16:24
반응형

문제 링크

아이디어

1. 내가 생각한 아이디어는 8개의 캐릭터를 8!로 일렬로 나열한다. -> 백트레킹으로 조합하여 ArrayList에 저장
2. 길이가 8이 되었을때 순서대로 나열한 ArrayList에서 indexOf로 index를 받아와 조건에 있는 두 캐릭터의 index차이를 구해서
조건에 부합하는지 operand에 맞게 검사해주고 만약 조건에 안맞으면 그냥 return
3. 부합하는 경우에는 static result에 +1씩해준다.
4. 마지막에 출력해주면 끝.

정답 코드

import java.util.*;
class Solution {
    static int result;
    static char [] name;
    static String [] datas;
    public int solution(int n, String[] data) {
        result = 0;
        name = new char[]{'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
        datas = data;
        makeNM(0, new ArrayList<Character>());
        return result;
    }
    static void makeNM(int len, ArrayList<Character> arr){
        if(len ==8){
            //조건 검사
            for(String x: datas){
                int front = arr.indexOf(x.charAt(0));
                int back = arr.indexOf(x.charAt(2));
                char operand = x.charAt(3);
                int num = x.charAt(4)-'0';
                if((operand=='='&&Math.abs(front-back)-1!=num)||(operand=='<'&&Math.abs(front-back)-1>=num)||(operand=='>'&&Math.abs(front-back)-1<=num)){
                    return;
                }
            }
            result ++;
            return;
        }
        for(int i=0; i<8; i++){
            if(!arr.contains(name[i])){
                arr.add(name[i]);
                makeNM(len+1, arr);
                arr.remove(arr.indexOf(name[i]));
            }
        }
    }
}
반응형

'PS > 프로그래머스(Programmers)' 카테고리의 다른 글

Lv.3 주사위 고르기 [JAVA]  (0) 2025.03.20
Lv2. 주차 요금 계산 [JAVA]  (0) 2025.03.19
Lv.2 캐시 [JAVA]  (0) 2025.03.12
Lv.2 프렌즈4블록 [JAVA]  (3) 2025.03.11
Lv.2 뉴스 클러스터링 [JAVA]  (0) 2025.03.10