1. 조건
IntegerCollector 만들기 ( *깃허브 연동해보기 )
<사용법>
add(int value) : 원하는 value(정수)를 배열에 추가한다.
getValue(int value) : value가 존재할 경우 값을 반환하고 없을 경우 -1을 반환한다.
find(int value) : value가 존재할 경우 값의 인덱스를 반환하고 없을 경우 -1을 반환한다.
print() : 현재 배열을 출력합니다.
removeValue(int Value) : value가 존재할 value를 반환하고 현재 배열에서 삭제합니다.삭제한 value 뒤의 유효값들을 한칸씩 댕깁니다.
expend(int size) : 현재 배열의 크기를 size로 변경합니다.
pack() : 현재 배열의 크기를 저장된 유효값만큼의 크기로 변경합니다.
<주의사항>
배열의 -2 값은 빈공간을 의미합니다.
pack()을 활용하여 최적화 할 수 있습니다.
2. 풀이
class IntegerCollector implements ICollect{
private int [] buffer = new int [1];
int cursor;
boolean lengthIsone = true;
public void add(int value) {
while (buffer.length <= ICollect.MAX_SIZE) {
for(int i=0;i<buffer.length;i++) {
if (buffer[i] == -2) {
buffer[i] =value;
System.out.println(value + " (을)를 배열에 추가하였습니다.");
return;
}
}
if (value >= 0) {
if (lengthIsone){
int [] temp_buffer = new int [] {value};
buffer = temp_buffer;
lengthIsone = false;
System.out.println(value + " (을)를 배열에 추가하였습니다.");
return;
}
int[] temp_buffer = new int[buffer.length + 1];
for (int i = 0; i < buffer.length; i++) {
temp_buffer[i] = buffer[i];
}
temp_buffer[buffer.length] = value;
buffer = temp_buffer;
System.out.println(value + " (을)를 배열에 추가하였습니다.");
return;
}
else {
System.out.println(value + " (은)는 음수이므로 저장할 수 없습니다.");
return;
}
}
}
public int getValue(int value) {
int output = -1;
for (int i=0; i<buffer.length; i++) {
if (buffer[i] == value){
output = value;
}
}
return output;
}
public int find(int value) {
int output = -1;
for (int i = 0; i < buffer.length; i++) {
if (buffer[i] == value) {
output = i;
}
}
return output;
}
public void print() {
System.out.print("현재까지 저장된 배열: [");
for (int i=0;i<buffer.length;i++) {
// if (buffer[i] ==-2) {
// continue;
// }
if (i==buffer.length-1) {
System.out.print(buffer[i]);
break;
}
System.out.print(buffer[i] + ",");
}
System.out.println("]");
}
public int removeValue(int value) {
int output = -1;
for (int i = 0; i < buffer.length; i++) {
if (buffer[i] == value) {
output = i;
buffer[i] = -1;
if (buffer[i] == -1) {
for (int j = i; j < buffer.length - 1; j++) {
buffer[j] = buffer[j + 1];
}
buffer[buffer.length-1] = -2;
}
System.out.println(value + " 배열에서 제거하였습니다. (-2는 빈공간을 의미합니다.)");
}
}
if(output==-1) {
System.out.println(value + " 은 배열에 존재하지 않는 값입니다.");
}
return output;
}
public void expend (int size) {
System.out.println("배열의 크기를 " + size + " 으(로) 변경합니다. (-2는 빈공간을 의미합니다.)");
int [] temp_buffer = new int [size];
for (int i=0;i<size;i++) {
if (i> buffer.length-1){
temp_buffer[i] = -2;
continue;
}
temp_buffer[i] = buffer[i];
}
buffer = temp_buffer;
}
public void pack() {
System.out.println("배열을 저장된 자료의 수 만큼으로 조절합니다.");
int count_blank = 0;
for (int i=0;i<buffer.length;i++) {
if (buffer[i] == -2) {
count_blank++;
}
}
int [] temp_buffer = new int [buffer.length-count_blank];
for (int i=0; i<temp_buffer.length;i++) {
if (buffer[i] != -2) {
temp_buffer[i] = buffer[i];
}
else {
temp_buffer[i] = buffer[i+1];
}
}
buffer = temp_buffer;
}
}
public class Applicaiton {
public static void main(String[] args) {
IntegerCollector int_col = new IntegerCollector();
int_col.add(5);
int_col.add(8);
int_col.add(11);
int_col.add(-14);
int_col.print();
int_col.removeValue(5);
int_col.print();
int_col.add(44);
int_col.print();
System.out.println("--------------------------------------");
int_col.pack();
int_col.print();
System.out.println("--------------------------------------");
int_col.add(31);
int_col.print();
int_col.removeValue(11);
int_col.print();
int_col.pack();
int_col.print();
System.out.println("--------------------------------------");
int_col.removeValue(44);
int_col.print();
int_col.pack();
int_col.print();
System.out.println("--------------------------------------");
int_col.expend(1);
int_col.print();
System.out.println("--------------------------------------");
int_col.expend(5);
int_col.print();
System.out.println("--------------------------------------");
int_col.add(19);
int_col.print();
System.out.println("--------------------------------------");
int_col.expend(10);
int_col.print();
int_col.pack();
int_col.print();
System.out.println("--------------------------------------");
int_col.removeValue(8);
int_col.print();
int_col.pack();
int_col.print();
System.out.println("--------------------------------------");
int_col.removeValue(19);
int_col.print();
int_col.pack();
int_col.print();
System.out.println("--------------------------------------");
int_col.add(19);
int_col.print();
System.out.println(int_col.getValue(19));
System.out.println(int_col.find(19));
System.out.println(int_col.getValue(11));
System.out.println(int_col.find(11));
}
}
3. 결과
API에 기재된 메서드 안쓰면서 만들어봤습니다.
감사합니당🐷🐷🐷