## 과제_0 : OOP 특징을 활용한 클래스 구조 설계 목표 : OOP 특징을 활용하여 클래스를 설계한다. 요구사항 : - 이전에 만든 `Human`, `Lion`, `Elephant`, `Dolphin`, `Turtle` 5개의 클래스의 공통 부모 클래스 `Animal`을 상속한다. - `Animal` 클래스는 추상 클래스로 만든다 - `Human`, `Lion`, `Elephant`, `Dolphin`, `Turtle`의 공통 필드 및 메서드를 부모 클래스 `Animal`에 구현한다. - `age`, `wegiht` 필드 및 `getter`, `setter`, `grow()`, `eat()` 메서드 - `Animal` 클래스는 `public abstract void move()` 메서드를 가지고 있다. - `Human`, `Lion`, `Elephant` 클래스는 `move()` 내부에 `walk()` 메서드를 호출한다. - `Dolphin`, `Turtle` 클래스는 `move()` 내부에 `swim()` 메서드를 호출한다. - `Human`, `Lion`, `Elephant`, `Dolphin`, `Turtle` 모두 `toString()` 메서드를 오버라이딩하여 클래스 이름, `age`, `weight` 정보를 출력한다. > 해당 문제는 정답이 없으므로 부담없이 설계해보자 ## 과제_1 : 배열 중복 제거 목표 : 배열에서 중복된 숫자를 제거하고, 중복되지 않은 숫자만을 반환하는 함수를 만들어본다 요구사항 : 다음 메서드를 완성하라 ```java public static int[] removeDuplicate(int[] numbers) { // 코드를 작성 } ``` - 반환될 배열의 길이는 중복된 숫자가 제거된 길이여야 한다 - 정렬 후의 배열 순서는 상관하지 않는다 --- **예시** ```java int[] numbers = {0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5}; int[] result = removeDuplicate(numbers); System.out.println(Arrays.toString(result)); // [0, 1, 2, 3, 4, 5] (순서는 상관하지 않는다) ``` ## 과제_2 : 프로그래머스 문제 풀기 1. [최소 직사각형](https://school.programmers.co.kr/learn/courses/30/lessons/86491) 2. [모의고사](https://school.programmers.co.kr/learn/courses/30/lessons/42840) --- ## 과제_0 : OOP 특징을 활용한 클래스 구조 설계 모범답안 ```java abstract class Animal { protected int age; protected int weight; public Animal(int age, int weight) { this.age = age; this.weight = weight; } public void grow() { this.age++; } public void eat() { this.weight++; } public int getAge() { return this.age; } public int getWeight() { return this.weight; } public void setAge(int age) { this.age = age; } public void setWeight(int weight) { this.weight = weight; } public abstract void move(); @Override public String toString() { return "Animal{" + "age=" + age + ", weight=" + weight + '}'; } } ``` ## 과제_1 : 배열 중복 제거 모범 답안 ```java public static int[] removeDuplicate(int[] numbers) { Integer[] temp = new Integer[numbers.length]; int count = 0; for (int i = 0; i < numbers.length; ++i) { int number = numbers[i]; for(int j = 0; j < temp.length; ++j) { if (temp[j] == null) { temp[j] = number; ++count; break; } else if (temp[j] == number) { break; } } } int[] res = new int[count]; for(int i = 0; i< temp.length; ++i){ if(temp[i] != null){ res[i] = temp[i]; } } return res; } ``` ## 과제_2 : 프로그래머스 문제 풀기 모범 답안 1. 최소 직사각형 ```java class Solution { public int solution(int[][] sizes) { int maxW = 0; int maxH = 0; for(int i =0; i<sizes.length; ++i){ int[] size = sizes[i]; int w = size[0]; int h = size[1]; if (w < h) { int temp = w; w = h; h = temp; } if (w > maxW) { maxW = w; } if (h > maxH) { maxH = h; } } return maxW * maxH; } } ``` 2. 모의고사 ```java class Solution { public int[] solution(int[] answers) { int[] answer = {}; int[] a = {1, 2, 3, 4, 5}; int[] b = {2, 1, 2, 3, 2, 4, 2, 5}; int[] c = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}; int[] score = new int[3]; int max = 0; int count = 0; for (int i = 0; i < answers.length; i++) { if (answers[i] == a[i % a.length]) { score[0]++; } if (answers[i] == b[i % b.length]) { score[1]++; } if (answers[i] == c[i % c.length]) { score[2]++; } } for (int i = 0; i < score.length; i++) { if (score[i] > max) { max = score[i]; } } for (int i = 0; i < score.length; i++) { if (score[i] == max) { count++; } } answer = new int[count]; count = 0; for (int i = 0; i < score.length; i++) { if (score[i] == max) { answer[count] = i + 1; count++; } } return answer; } } ```