Java_기초_Day8( IntegerCollector 만들기)

임정민·2022년 10월 27일
0

언어공부

목록 보기
10/10
post-thumbnail

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에 기재된 메서드 안쓰면서 만들어봤습니다.
감사합니당🐷🐷🐷

profile
https://github.com/min731

0개의 댓글