'데이터 사용에 대한 방법론'이다
선형 구조 : Array, LinkedList, Stack, Queue
비선형 구조 : Tree, Graph
데이터(data)를 순서대로 쌓는 자료 구조
LIFO(Last In First Out)
PUSH() POP() empty()
get() set(index,e) remove()
데이터는 하나씩만 넣고 뺄 수 있다
하나의 입출력 방향을 가짐
출력속도가 매우 빠르다
JVM 기본 자료구조(추가 라이브러리, 모듈x)
크기 제한이 없다
Stack클래스는 Vector클래스를 상속받아 구현함으로 배열의 크기가 고정,
초과시 새로운 배열을 할당하는 식으로 크기가 자주 변하는 스택은 비효율적
Vector의 메서드 일부를 오버라이딩 함에 주의
Vector의 생성자
public Vector(Collection<? extends E> c) {
Object[] a = c.toArray();//받은 값 c를 배열화
elementCount = a.length;
if (c.getClass() == ArrayList.class) { //c가 ArrayList일 경우 배열생성 없이 그대로 사용
elementData = a;
} else {
elementData = Arrays.copyOf(a, elementCount, Object[].class);//ArrayList가 아니면 배열을 생성하여 배열복사
}//Arrays.copyOf(원본, 복사할 길이)
}
먼저 들어간 데이터(data)가 먼저 나오는 구조
FIFO(First In First Out)
add() poll() peek()
데이터는 하나씩만 넣고 뺄 수 있다
두개의 입출력 방향을 가짐
순차처리가 중요한 경우에 유용
JVM 기본 자료구조(추가 라이브러리, 모듈x)
중간 요소를 삭제하는 연산이 없어 상대적으로 속도가 빠르다
중간 요소를 다룸에는 적합하지 않다
Queue인터페이스는 크기 제한이 없다
iterator() 메서드가 지원되지 않는다
remove(Object o) 메서드의 동작이 불명확하다
처리공간의 갯수와 크기가 한정된 가진 프린터 문제에서 막혔다
기본적으로 Queue 문제라 ArrayList를 사용하려 했으나 왜 인지 실패했다
-> LinkedList를 사용했어야 했다
그래서 List 사용중 데이터가 인쇄할 요소가 담기지 못한 경우 null을 넣었으나 오류가 났다.
-> 가변하는 List이기 때문에 0을 넣었어야 했다
List[0]을 지우고 인쇄할 배열[0]를 add를 하는 방식으로 시도했으나 오류가 났다
-> List에 들어간 배열 요소를 없애고 새 배열로 바꿔야 했다
배열을 돌리면서 while문 내에 for-each를 사용했는데 while조건식에서 오류가 났다
-> 배열 뿐만 아니라 List내에 문서가 남아있는 경우도 조건을 넣었어야 했다
-> &&이냐 ||이냐의 구분도 중요했다
이쯤에서 오류가 너무 많이나서 코드를 포기하고 hashmap으로 선언을 바꿨다
키를 인쇄할 요소로 넣고 값을 시간으로 해서 1초가 지날 때 마다 증가시키는 방법이었는데 완성하니 값은 제대로 나오는 것 같은데 조건에 문제가 생겼다.. 문제가 뭔지 알아야 푸는데 알수가 없어서 일단 문의넣고 다시 처음으로 돌아왔다
답지를 안 보고 최대한 노력하는건 확실히 도움이 되지만 지나치면 체력이 많이 소모된다.
다음부턴 풀다가 너무 막힌다 싶으면 해설을 먼저 보고 비슷한 문제를 반복해서 풀어보는게 날 것 같다
그나마 풀이 해설과 전체적인 알고리즘 흐름이 비슷했다는 것에 만족한다