정수 배열을 받아 중앙값(median)을 double로 반환하는 static 메서드 median(int[] a)를 작성하세요. 원본 배열을 변경하면 안 됩니다. 원소 수가 짝수면 가운데 두 값의 평균, 빈 배열이면 가드 절로 0.0을 반환합니다.
import java.util.Arrays;
public class Q1 {
static double median(int[] a) {
if (a == null || a.length == 0) return 0.0; // 가드 절
int[] copy = Arrays.copyOf(a, a.length); // 원본 보호
Arrays.sort(copy);
int mid = copy.length / 2;
if (copy.length % 2 == 1) return copy[mid];
return (copy[mid - 1] + copy[mid]) / 2.0; // 2.0 → 실수 나눗셈
}
public static void main(String[] args) {
int[] odd = {5, 1, 9};
int[] even = {4, 1, 3, 2};
System.out.println(median(odd)); // 출력: 5.0
System.out.println(median(even)); // 출력: 2.5
System.out.println(median(new int[0])); // 출력: 0.0
System.out.println(Arrays.toString(odd)); // 출력: [5, 1, 9] (원본 그대로)
}
}가변 인자로 여러 문자열을 받아 가장 긴 문자열과 그 길이를 함께 반환하는 메서드를 작성하세요. 반환 타입은 record Longest(String text, int length)입니다. 인자가 하나도 없으면 new Longest("", 0)을 반환합니다. 길이가 같으면 먼저 온 것을 택합니다.
public class Q2 {
record Longest(String text, int length) {}
static Longest longest(String... words) {
if (words.length == 0) return new Longest("", 0);
String best = words[0];
for (String w : words)
if (w.length() > best.length()) best = w; // > 이므로 동률이면 앞의 것 유지
return new Longest(best, best.length());
}
public static void main(String[] args) {
System.out.println(longest("java", "kotlin", "go")); // 출력: Longest[text=kotlin, length=6]
System.out.println(longest("ab", "cd")); // 출력: Longest[text=ab, length=2]
System.out.println(longest()); // 출력: Longest[text=, length=0]
Longest l = longest("a", "bbb");
System.out.println(l.text() + " / " + l.length()); // 출력: bbb / 3
}
}다음 main은 한 덩어리로 되어 있습니다. isVowel(char), countVowels(String), describe(String) 세 메서드로 분리하고, describe가 "hello: 모음 2개" 형식의 문자열을 반환하도록 리팩터링하세요. 또 power(int base, int exp)를 재귀로 작성하고 exp < 0은 가드 절로 -1을 반환하게 하세요.
public static void main(String[] args) {
String s = "hello world";
int count = 0;
for (char c : s.toCharArray()) {
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') count++;
}
System.out.println(s + ": 모음 " + count + "개");
}public class Q3 {
static boolean isVowel(char c) {
return "aeiou".indexOf(Character.toLowerCase(c)) >= 0;
}
static int countVowels(String s) {
int count = 0;
for (char c : s.toCharArray()) if (isVowel(c)) count++;
return count;
}
static String describe(String s) {
return s + ": 모음 " + countVowels(s) + "개";
}
static long power(int base, int exp) {
if (exp < 0) return -1; // 가드 절
if (exp == 0) return 1; // 기저 조건
return base * power(base, exp - 1); // 재귀 단계
}
public static void main(String[] args) {
System.out.println(describe("hello world")); // 출력: hello world: 모음 3개
System.out.println(describe("JAVA")); // 출력: JAVA: 모음 2개
System.out.println(isVowel('E')); // 출력: true
System.out.println(power(2, 10)); // 출력: 1024
System.out.println(power(2, -1)); // 출력: -1
}
}