공공부하자개발 · 영어 학습 노트
자바
초급자바의 뼈대0/8 완료
  • 00개발 환경과 첫 프로그램
  • 01변수, 데이터 타입, 형변환
  • 02연산자와 제어문
  • 031차원 · 2차원 배열
  • 04클래스, 객체, 생성자, 오버로딩
  • 05접근 제어자와 캡슐화
  • 06메서드 활용 패턴 (초급)
  • 07enum, 패키지와 import, static 과 final
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 초급 › 06 / 8

메서드 활용 패턴 (초급)

섹션 6진행 0 / 8
1왜 배우는가2핵심 원리3패턴 모음4자주 하는 실수 (Tip)5연습 문제6정리‹ 이전다음 ›

5. 연습 문제

문제 1

정수 배열을 받아 중앙값(median)을 double로 반환하는 static 메서드 median(int[] a)를 작성하세요. 원본 배열을 변경하면 안 됩니다. 원소 수가 짝수면 가운데 두 값의 평균, 빈 배열이면 가드 절로 0.0을 반환합니다.

정답 보기
java
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]  (원본 그대로)
    }
}

문제 2

가변 인자로 여러 문자열을 받아 가장 긴 문자열과 그 길이를 함께 반환하는 메서드를 작성하세요. 반환 타입은 record Longest(String text, int length)입니다. 인자가 하나도 없으면 new Longest("", 0)을 반환합니다. 길이가 같으면 먼저 온 것을 택합니다.

정답 보기
java
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
    }
}

문제 3

다음 main은 한 덩어리로 되어 있습니다. isVowel(char), countVowels(String), describe(String) 세 메서드로 분리하고, describe가 "hello: 모음 2개" 형식의 문자열을 반환하도록 리팩터링하세요. 또 power(int base, int exp)를 재귀로 작성하고 exp < 0은 가드 절로 -1을 반환하게 하세요.

java
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 + "개");
}
정답 보기
java
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
    }
}
연습 문제
  • 문제 1
  • 문제 2
  • 문제 3
이전 섹션4 자주 하는 실수 (Tip)5 / 6다음 섹션6 정리