알고리즘 & 자료구조/알고리즘

기초수학-연습 문제 풀이 2-1

죽밥죽밥화이팅 2024. 8. 7. 17:29


public class Practice1 {

    public static int solution(int n) {
        int result = 0;

        if (n <= 1) {
            return 1;
        }

        for (int i = 0; i < n; i++) {
            result += solution(i) * solution(n - i - 1);
        }
        return result;
    }


    public static void main(String[] args) {
        // Test code
        System.out.println(solution(0)); // 1
        System.out.println(solution(2)); // 2
        System.out.println(solution(5)); // 42
        System.out.println(solution(7)); // 429
    }
}

 

 

 


public class Practice2 {
    public static int solution(String str) {
        return isPalindrome(0, str.length() - 1, str.toCharArray(), 0);
    }

    public static int isPalindrome(int left, int right, char[] arr, int delCnt) {
        while (left < right) {
            if (arr[left] != arr[right]) {

                if (delCnt == 0) {
                    if (isPalindrome(left + 1, right, arr, 1) == 0 ||
                            isPalindrome(left, right - 1, arr, 1) == 0) {
                        return 1;
                    } else {
                        return 2;
                    }
                } else {
                    return 2;
                }

            } else {
                left++;
                right--;
            }
        }
        return 0;
    }

    public static void main(String[] args) {
        // Test code
        String[] str = {"abba", "summuus", "xabba", "xabbay", "comcom", "comwwmoc", "comwwtmoc"};
        System.out.println(solution("abba")); // 0
        System.out.println(solution("summuus")); // 1
        System.out.println(solution("xabba")); // 1
        System.out.println(solution("xabbay")); // 2
        System.out.println(solution("comcom")); // 2
        System.out.println(solution("comwwmoc")); // 0
        System.out.println(solution("comwwtmoc")); // 1
    }
}

 

 

 

 


public class Practice3 {
    public static String solution(String equation) {
        String[] parts = equation.split("=");
        int[] leftSide = evaluate(parts[0]);
        int[] rightSide = evaluate(parts[1]);

        if (leftSide[0] == rightSide[0] && leftSide[1] == rightSide[1]) {
            return "Infinite solutions";
        } else if (leftSide[0] == rightSide[0]) {
            return "No solution";
        } else {
            return "x=" + (rightSide[1] - leftSide[1]) / (leftSide[0] - rightSide[0]);
        }
    }

    public static int[] evaluate(String str) {
        int[] result = new int[2];

        boolean isMinus = false;
        int idx = 0;
        while (idx != str.length()) {
            char c = str.charAt(idx++);

            if (c == '+') {
                continue;
            }

            if (c == '-') {
                isMinus = true;
                continue;
            }

            if (c == 'x') { //x의 갯수를 업데이트
                result[0] += isMinus ? -1 : 1;
            } else { //상수 데이터일 경우
                if (idx < str.length() && str.charAt(idx) == 'x') {
                    result[0] += isMinus ? -(c - '0') : (c - '0'); //(c-'0'): 상수 값을 인티저로 바꾸는 방법
                } else { //상수는 result[1]에 정리
                    result[1] += isMinus ? -(c - '0') : (c - '0');
                }
            }

            isMinus = false;
        }

        return result;
    }

    // # 2 정규표현식 사용 => .split("(?=[+-])")
    public static int[] evaluate2(String str) {
        int[] result = new int[2];

        for (String s : str.split("(?=[+-])")) {
            if (s.equals("+x") || s.equals("x")) {
                result[0]++;
            } else if (s.equals("-x")) {
                result[0]--;
            } else if (s.contains("x")) {
                result[0] += Integer.parseInt(s.substring(0, s.length() - 1));
            } else {
                result[1] += Integer.parseInt(s);
            }
        }
        return result;
    }

    public static void main(String[] args) {
        // Test code
        String equation = "x+5-3+x=6+x-2";
        System.out.println(solution(equation)); // x=2

        equation = "x=x";
        System.out.println(solution(equation)); // Infinite solutions

        equation = "2x=x";
        System.out.println(solution(equation)); // x=0
    }
}