## 과제_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;
}
}
```