정수 배열에서 중복을 제거한 새 배열을 반환하는 메서드 int[] unique(int[] arr)를 작성하세요. 순서는 처음 등장한 순서를 유지합니다. (힌트: 결과를 담을 임시 배열을 원본 크기로 만들고 개수를 세어 Arrays.copyOf로 잘라내기)
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[]{})));
// 출력: []
}
}5×5 정수 배열을 1부터 25까지 채운 뒤, 대각선 합(왼쪽 위→오른쪽 아래)과 테두리 합(가장자리 칸들의 합)을 구하세요.
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
}
}문자열 배열 String[] logs에 "user:action" 형태의 로그가 있습니다. 사용자별 액션 횟수를 세어 출력하세요. 사용자는 최대 10명이라고 가정하고, String[] users와 int[] counts 두 배열로 관리하세요. (컬렉션을 배우기 전 방식)
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회
}
}