Algorithm/알고리즘 이론

세무민의 코딩일기 : 코딩 테스트를 준비해보자....[부제 : linked list]

세기루민 2021. 1. 24. 15:40
728x90

흠... 우선 서류 통과를 한 기업이 생겼는데....

최근들어 문제가 발생했다.

서류 통과 후 알고리즘 테스트인지 아니면 시스템 설계하는 테스트인지 정확하게 알려진 건 없지만 

코딩 테스트를 본다고 한다.

그래서 급하게 공부를 시작했지만 쉽지 않다는 걸 느끼게 되었구 

시험을 못보더라도 꾸준히 알고리즘 공부를 해야겠다는 생각에 같이 공부할 예정이다. 


우선 기본적으로 공부할 내용은 linked-list!

사실 Array와 linked-list 두개가 주로 사용되지만 

때로는 두개의 성능의 차이로 사용되는 부분이 다르다.

arraylist는 많은 양에 자료를 추가하거나 삭제하는 과정에서 성능이 저하되지만 

그에 비해 linked-list는 데이터 추가하거나 삭제하는 과정이 효율적이다.

또 다른 차이로는 arraylist는 index가 존재하여 arraylist.get()이라는 매소드를 이용하여 

쉽게 데이터를 검색할 수 있으나 

linked-list는 처음부터 노드를 순회해야 하기 때문에 성능상 비효율적이다. 

 


public class Linklist {
	
	private static LinkedList<Integer> temper[];
	
	// linkedlist 초기화
	public static void link_clean(int number) {
		temper = new LinkedList[number];
		for(int i = 0; i < number; i++) {
			temper[i] = new LinkedList();
		}		
	}
	
	// linkedlist 전체 값 출력
	public static void link_Select() {
		
		for(LinkedList<Integer> i : temper) {
			System.out.println(i.peek());
		
		}
	}

	// linkedlist 전체 값 추가
	public static void link_add(int i, int selectNumber){
		temper[i].add(selectNumber);
	}
	
	// 출력 후 삭제
	public static void link_poll() {
		for(LinkedList<Integer> i : temper) {
			System.out.println(i.poll());
		
		}
	}
	
	public static void main(String args[]) {
//		int[] number = {1, 2, 3, 4, 5, 6, 7};
		Scanner scan = new Scanner(System.in);
		System.out.println("linkedlist size : " );
		int size = scan.nextInt();
		link_clean(size);
		int num1 = 0;
		for(int i = 0; i < size; i++) {
			System.out.println("linkedlist add" + i + " : " );
			num1 = scan.nextInt();
			link_add(i, num1);
		}
		System.out.println("-- link_select() --");
		link_Select();	
		System.out.println("-- link_poll() --");
		link_poll();
		System.out.println("-- link_select() --");
		link_Select();	
	}
	
}

우선 위의 코드를 구성해봤는데 

위의 코드는 완전 간단하다. 

사실상 자바에서는 linked-list를 지원해주기 때문에 사용하면 된다. 

linked-list의 사이즈를 선택해주고 하나씩 추가하면서 직접 확인해봤다. 

여기서 poll과 peek의 차이가 존재하는데 

peek는 첫번째 노드부터 하나씩 출력해주지만 삭제를 하지 않는다. 

이와 달리 poll은 첫번째 노드부터 하나씩 출력하면서 하나씩 삭제하기 때문에 

용도에 따라서 자유롭게 사용하면 된다.

더 자세한 클래스에 대한 정보를 확인하려면 

해당 클레스를 ctrl + 마우스 클릭하여 확인도 가능하지만 

docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/LinkedList.html

 

LinkedList (Java SE 15 & JDK 15)

Type Parameters: E - the type of elements held in this collection All Implemented Interfaces: Serializable, Cloneable, Iterable , Collection , Deque , List , Queue public class LinkedList extends AbstractSequentialList implements List , Deque , Cloneable,

docs.oracle.com

오라클 사이트에서 직접 확인하는 것이 더 편리하다. 

linked-list를 사용할 때 Queue나 Deque을 이용하는 경우 

추가된 메소드를 이용할 수 있다는 점을 알 수 있었다. 

예를 들어서 peekFrist()나 peekLast()와 같이 

Queue환경에서도 linked-list를 구현할 수 있다는 것을 알게되었다. 


사실 알고리즘 문제를 풀고있긴 하지만 

linked-list 사용법이 갑자기 생각나서 이렇게 포스팅을 하게되었지만

다음에는 알고리즘 문풀 포스팅을 할 예정!

728x90