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

1차원 · 2차원 배열

섹션 7진행 0 / 8
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

6. 연습 문제

문제 1

정수 배열에서 중복을 제거한 새 배열을 반환하는 메서드 int[] unique(int[] arr)를 작성하세요. 순서는 처음 등장한 순서를 유지합니다. (힌트: 결과를 담을 임시 배열을 원본 크기로 만들고 개수를 세어 Arrays.copyOf로 잘라내기)

정답 보기
java
import java.util.Arrays;

public class Exercise1 {
    static int[] unique(int[] arr) {
        int[] tmp = new int[arr.length];
        int n = 0;
        for (int v : arr) {
            boolean seen = false;
            for (int i = 0; i < n; i++) {
                if (tmp[i] == v) { seen = true; break; }
            }
            if (!seen) tmp[n++] = v;
        }
        return Arrays.copyOf(tmp, n);   // 실제 개수만큼 잘라냄
    }

    public static void main(String[] args) {
        System.out.println(Arrays.toString(unique(new int[]{3, 1, 3, 2, 1, 5})));
        // 출력: [3, 1, 2, 5]
        System.out.println(Arrays.toString(unique(new int[]{})));
        // 출력: []
    }
}

문제 2

5×5 정수 배열을 1부터 25까지 채운 뒤, 대각선 합(왼쪽 위→오른쪽 아래)과 테두리 합(가장자리 칸들의 합)을 구하세요.

정답 보기
java
public class Exercise2 {
    public static void main(String[] args) {
        int n = 5;
        int[][] g = new int[n][n];
        int v = 1;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                g[i][j] = v++;

        int diag = 0;
        for (int i = 0; i < n; i++) diag += g[i][i];

        int border = 0;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                if (i == 0 || i == n - 1 || j == 0 || j == n - 1) border += g[i][j];

        System.out.println("대각선 합: " + diag);    // 출력: 대각선 합: 65
        System.out.println("테두리 합: " + border);  // 출력: 테두리 합: 208
    }
}

문제 3

문자열 배열 String[] logs에 "user:action" 형태의 로그가 있습니다. 사용자별 액션 횟수를 세어 출력하세요. 사용자는 최대 10명이라고 가정하고, String[] users와 int[] counts 두 배열로 관리하세요. (컬렉션을 배우기 전 방식)

정답 보기
java
public class Exercise3 {
    public static void main(String[] args) {
        String[] logs = {"kim:login", "lee:view", "kim:view", "park:login", "kim:logout", "lee:logout"};
        String[] users = new String[10];
        int[] counts = new int[10];
        int userCount = 0;

        for (String log : logs) {
            String user = log.split(":")[0];
            int idx = -1;
            for (int i = 0; i < userCount; i++) {
                if (users[i].equals(user)) { idx = i; break; }
            }
            if (idx == -1) {                 // 처음 보는 사용자
                users[userCount] = user;
                idx = userCount++;
            }
            counts[idx]++;
        }

        for (int i = 0; i < userCount; i++) {
            System.out.println(users[i] + ": " + counts[i] + "회");
        }
        // 출력: kim: 3회
        // 출력: lee: 2회
        // 출력: park: 1회
    }
}
연습 문제
  • 문제 1
  • 문제 2
  • 문제 3
이전 섹션5 자주 하는 실수 (Tip)6 / 7다음 섹션7 정리