Stack, Queue 알고리즘 3
자바에서 제공하는 LinkedList로 구현한 알고리즘 문제
개와 고양이만 분양하는 분양소가 있다
분양받는 사람은 동물의 종류만 고를수 있고, 분양소에서 가장 오래 있는 순서로
자동으로 분양될 동물이 정해지는 클래스를 구현하시오.
단, 자바에서 제공하는 LinkedList로 구현하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import java.util.LinkedList;
enum AnimalType {
DOG, CAT
}
abstract class Animal {
AnimalType type;
String name;
int order;
Animal(AnimalType type, String name) {
this.type = type;
this.name = name;
}
int getOrder() {
return order;
}
void setOrder(int order) {
this.order = order;
}
String info() {
return order + ") type: " + type + ", name : " + name;
}
}
class Dog extends Animal {
Dog(String name) {
super(AnimalType.DOG, name);
}
}
class Cat extends Animal {
Cat(String name) {
super(AnimalType.CAT, name);
}
}
class AnimalShelter {
LinkedList<Animal> dogs = new LinkedList<>();
LinkedList<Animal> cats = new LinkedList<>();
int order;
AnimalShelter() {
order = 1;
}
void enqueue(Animal animal) {
animal.setOrder(order);
order += 1;
if (animal.type == AnimalType.DOG) {
dogs.addLast(animal);
} else if (animal.type == AnimalType.CAT) {
cats.addLast(animal);
}
}
Animal dequeueDog() {
return dogs.poll();
}
Animal dequeueCat() {
return cats.poll();
}
Animal dequeue() {
if (dogs.isEmpty() && cats.isEmpty()) {
return null;
} else if (dogs.isEmpty()) {
return cats.poll();
} else if (cats.isEmpty()) {
return dogs.poll();
}
Animal dog = dogs.peek();
Animal cat = cats.peek();
return dog.getOrder() > cat.getOrder() ? cats.poll() : dogs.poll();
}
}
public class test2 {
public static void main(String[] args) {
AnimalShelter animalShelter = new AnimalShelter();
Dog dog1 = new Dog("d1");
Dog dog2 = new Dog("d2");
Dog dog3 = new Dog("d3");
Dog dog4 = new Dog("d4");
Cat cat1 = new Cat("c1");
Cat cat2 = new Cat("c2");
Cat cat3 = new Cat("c3");
Cat cat4 = new Cat("c4");
animalShelter.enqueue(dog1);
animalShelter.enqueue(cat1);
animalShelter.enqueue(cat2);
animalShelter.enqueue(cat3);
animalShelter.enqueue(cat4);
animalShelter.enqueue(dog2);
animalShelter.enqueue(dog3);
animalShelter.enqueue(dog4);
System.out.println(animalShelter.dequeue().info());
System.out.println(animalShelter.dequeue().info());
System.out.println(animalShelter.dequeue().info());
System.out.println(animalShelter.dequeue().info());
System.out.println(animalShelter.dequeue().info());
System.out.println(animalShelter.dequeue().info());
System.out.println(animalShelter.dequeue().info());
System.out.println(animalShelter.dequeueDog().info());
System.out.println(animalShelter.dequeueCat().info()); // NullPointException
}
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.