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
}
}
'알고리즘 & 자료구조 > 알고리즘' 카테고리의 다른 글
알고리즘 - 정렬 (1) (0) | 2024.08.22 |
---|---|
기초수학-연습 문제 풀이 2-2 (0) | 2024.08.07 |
기초수학-연습 문제 풀이 1-2 (0) | 2024.08.05 |
기초수학-연습 문제 풀이 1-1 (0) | 2024.08.05 |
알고리즘(Algorithm)과 복잡도 (0) | 2024.08.05 |