2일차 _ 2

프로그래머스

문제 : 단체사진 찍기

2일차 백준 문제가 너무 쉬워서 프로그래머스 문제도 풀었다.
1,168명이 푼 문제로 사람들이 많이 안푼것 같아서 시도했다.
50분 정도 걸려서 다 풀었다...

문제 설명은 아래 링크
https://programmers.co.kr/learn/courses/30/lessons/1835?language=java

풀이

사용언어: java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution {
    private static int count = 0;
    private static String[] conditions;

    public static int solution(int n, String[] data) {
        if (n == 0) return 0;

        count = 0;
        conditions = data;
        List<String> friendList = new ArrayList<>(Arrays.asList("A", "C", "F", "J", "M", "N", "R", "T"));
        List<String> result = new ArrayList<>();

        recursion(friendList, result, friendList.size(), friendList.size());
        
        return count;
    }

    private static void recursion(List<String> arr, List<String> result, int size, int repeat) {
        if (repeat == 0) {
            if (checkCondition(result)) count++;
            return;
        }

        for (int i = 0; i < size; i++) {
            result.add(arr.remove(i));
            recursion(arr, result, size-1, repeat-1);
            arr.add(i, result.remove(result.size() - 1));
        }
    }

    private static boolean checkCondition(List<String> list) {
        String sequence = arrayToString(list);
        for (int i = 0; i < conditions.length; i++) {
            String friendOne = conditions[i].substring(0, 1); // 조건 제시한 프렌즈
            String friendTwo = conditions[i].substring(2, 3); // 상대방
            String condition = conditions[i].substring(3, 4); // 조건
            int distance = Integer.parseInt(conditions[i].substring(4)); // 거리

            int firstIndex = sequence.indexOf(friendOne);
            int secondIndex = sequence.indexOf(friendTwo);

            if (condition.equals("=")) {// 같음
                if ( (Math.abs(firstIndex - secondIndex) - 1) != distance) {
                    return false;
                }
            }

            if (condition.equals("<")) {// 미만
                if (!((Math.abs(firstIndex - secondIndex) - 1) < distance)) {
                    return false;
                }
            }

            if (condition.equals(">")) {// 초과
                if (!((Math.abs(firstIndex - secondIndex) - 1) > distance)) {
                    return false;
                }
            }
        }

        return true;
    }

    private static String arrayToString(List<String> arr) {
        StringBuilder sb = new StringBuilder();
        for (String s : arr) {
            sb.append(s);
        }
        return sb.toString();
    }
}

좋은 웹페이지 즐겨찾기