달력

7

« 2020/7 »

  • 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
  •  



 

알고리즘(Algorithm) 

·         문제를 어떻게 효율적으로 풀어가느냐에 대한 방법입니다.

·         컴퓨터로 문제를 풀기 위한 단계적인 절차입니다.

·         추상적, 개략적으로 기술한 조리법/동작법 해당됩니다.

·         알고리즘을 구체적으로 표현한 것이 프로그램(program)입니다.

·         기본 동작을 언급하되 너무 추상적이거나 구체적이어서는 안됩니다.

 

https://bit.ly/2WoDUg2

 

구분

설명

넓은 의미

자료 구조와 함께 프로그램을 구성하는 요소를 의미

좁은 의미

어떤 문제에 대한 답을 찾는 해법을 의미






Posted by codedragon codedragon

댓글을 달아 주세요

 

 

Vector의 용량(Capacity)와 크기(size) 살펴보기

 

 

Vector v = new Vector(5);



 

 

v.add("10");

v.add("20");

v.add("30");


 

 





 

v.trimToSize();


 




 

v.ensureCapacity(6);






 

 

v.setSize(7);


 





 

v.clear();


 

 

Posted by codedragon codedragon

댓글을 달아 주세요

 

 

하노이의 (Tower of Hanoi)

·         하노이의 탑은 퍼즐의 일종입니다.

·         개의 기둥과 기둥에 꽂을 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기

·         전에는 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있습니다.

·         수학에서 수열문제이며 프로그래밍에서 재귀함수 이용하여 있는 가장 유명한 예제 중의 하나입니다.

 

http://bit.ly/2TRz60z

http://bit.ly/2vrR5kQ 




 

 

제한 사항(게임 규칙)

·         작은 원반은 큰 원반위에만 올라 갈 수 있으며 큰 원반은 작은 원반 위에 올라갈 수 없습니다.

·         한번에 하나의 원반만 옮겨야 한다.

 

 

게임의 목적

위 두 가지 조건을 만족시키면서, 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓는 것입니다.  

 


 

하노이의 탑 원리

일반적으로 원판이 n개 일 때 2n-1번의 이동으로 원판을 모두 옮길 수 있습니다.

3개의 기둥과, n개의 원판이 있습니다.


 

원판을 조건에 맞춰 다른 기둥으로 옮기기 위해 우선 왼쪽 기둥의 n-1개의 원판을 가운데 기둥으로 옮깁니다. 이때 오른쪽 기둥을 이용합니다.


 

그리고 왼쪽 기둥의 원판을 오른쪽 기둥으로 옮깁니다.


 

가운데 기둥의 n-1개의 원판을 오른쪽 기둥으로 옮깁니다.


  


 

하노이의 탑 원리 애니메이션 


 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

소수(Prime number)

·         1과 자기 자신으로밖에 나누어지지 않는 1 이외의 정수

·         자신보다 작은 개의 자연수를 곱하여 만들 없는 1보다 자연수

·         1 자신 이외의 자연수로는 나눌 없는 자연수

 

http://bit.ly/2PN3Jj5

http://bit.ly/2CY4cMz

https://en.wikipedia.org/wiki/Prime_number

 

슷자

설명

5

1 * 5

5 * 1

5 1x5 또는 5x1 수를 곱한 결과를 적는 유일한 방법이 자신을 포함하기 때문에 5 소수(Prime number)입니다.

6

2 * 3

자신보다 작은 숫자(2×3) 곱이므로 소수가 아닙니다.

1보다 자연수 소수가 아닌 것은 합성수(Composite number)라고 합니다.

 

 

 

 


 



Posted by codedragon codedragon

댓글을 달아 주세요



 

 

 

Heinrich's law(하인리히의 법칙)

·         1:29:300 법칙

·         어떤 대형 사고가 발생하기 전에는 그와 관련된 수십 차례의 경미한 사고와 수백 번의 징후들이 반드시 나타난다는 것을 뜻하는 통계적 법칙

 


 

 

http://bit.ly/2Onpzu0

https://en.wikipedia.org/wiki/Herbert_William_Heinrich

 

 


Posted by codedragon codedragon

댓글을 달아 주세요

 

 

 

Douglas-Peucker 알고리즘 (DP Algorithm)

·       Ramer–Douglas–Peucker algorithm

·       벡터 단순화 알고리즘

·       다각형 근사에 사용되는 알고리즘

·       영상에서 추출한 객체(object)의 경계선은 객체의 모양에 대한 많은 정보를 담고 있지만, 어떤 경우에는 불필요한 정보가 될 수도 있습니다. 이런 경우에 원래의 경계를 충분히 닮은 다각형으로 간략화해서 불필요한 정보를 제거할 수 있게 해주는 알고리즘입니다.

 

 

https://en.wikipedia.org/wiki/Ramer–Douglas–Peucker_algorithm

 





Posted by codedragon codedragon

댓글을 달아 주세요

   

   

큐(Queue)

  • 대기열
  • Queue의 구조는 도로에 뚫려져 일정구간의 일방통행인 터널형태와 동일한 원리입니다.
  • 요소(Element)가 들어가는 입구와 요소(Element)가 나오는 출구가 따로 준비 되어 있어 가장 먼저 들어간 요소(Element)가 가장 먼저 나오는 선입선출, first-in-first-out(FIFO)방식의 자료구조입니다.   


   

   



Queue 활용 사례

  • OS CPU의 연산 처리시 작업 대기
  • 프린터가 출력하는 문서 대기시
  • 동영상 스트리밍 서비스에서 컨텐츠 버퍼링시

   


큐(Queue) 도식도

http://codedragon.tistory.com/4688

Posted by codedragon codedragon

댓글을 달아 주세요


 

 

LinkedList<E>에서 컬렉션 클래스를 HashSet<E> 변경

IteratorEx01.java에서 LinkedList<E> HashSet<E>변경시 반복자를 사용하기 때문에

컬렉션 선언만 바뀌고 나머지 부분은 모두 동일하게 사용할 있습니다.

LinkedList<String> list = new LinkedList<String>();

list.add("First");

list.add("Second");

list.add("Third");

list.add("Fourth"); 

list.add("Fifth");

현재 LinkedList<E>

HashSet<String> set = new HashSet<String>();

set.add("First");

set.add("Second");

set.add("Third");

set.add("Fourth");

set.add("Fifth");

LinkedList<E>에서 컬렉션 클래스를 HashSet<E> 변경

 

 

 

ArrayList 저장된 요소 출력하기

ArrayList대신 List인터페이스를 구현한 다른 컬렉션 클래스에 대해서도 동일한 코드를 사용할 있습니다.

첫줄의 ArrayList() 생성자 대인 List인터페이스를 구현한 다른 컬렉션 클래스의 객체를 생성하도록 변경하면 나머지 부분은 모두 동일하게 사용할 있습니다.

Iterator 이용해서 컬렉션의 요소를 읽어오는 방법은 표준화되어 있기 때문에 아래와 같이 코드의 재사용성을 높일 있습니다.

// 다른 컬렉션으로 변경할 때는 new ArrayList()부분만 변경하면 됩니다.

List list = new ArrayList();

 

Iterator iterator = list.iterator();

 

while(iterator.hasNext()){

System.out.println(iterator.next());

}

List 없고 ArrayList에만 있는 메소드를 사용하는 것이 아니라면 List타입의 참조변수를 생성하도록 선언하는 것이 좋습니다.

성능상의 이유이거나 테스트할 목적으로 List인터페이스를 구현한 다른 클래스로 바꿔야 한다면(LinkedList 바꿔야 한다면) 선언문 하나만 변경하면 나머지 부분은 모두 동일하게 변경없이 사용할 있습니다.

List list = new LinkedList();

 

, 참조변수의 타입이 List이므로 List 정의되지 않은 메소드는 사용하지 않을 것이기 때문입니다.

 

ArrayList list = new LinkedList();

만약 참조변수의 타입을 ArrayList 경우 참조변수 선언 이후의 코드를 검토하여 List 정의되지 않은 메소드를 호출했는지 확인해야 합니다.

 




Posted by codedragon codedragon

댓글을 달아 주세요

 

 

자료 형태에 따른 자료 구조 분류

유형

설명

선형 구조(Linear)

자료들 사이의 선후 관계가 일대일인 구조입니다.

 

ex) 연결 자료 구조, 순차 자료 구조, 스택, ,

비선형 구조(Non-Linear)

자료들 사이의 선후 관계가 계층 또는 그물 형태를 가지는 구조입니다.

 

ex) 트리, 그래프

단순 구조(Simple)

프로그래밍 언어에서 제공하는 기본 데이터 타입입니다.

 

ex) int, float, double, char

파일 구조(File)

보조 기억 장치에 데이터값이 실제로 기록되는 자료 구조입니다.

 

ex) 순차 파일, 색인 파일

 

 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

 

Collections

배열과 관련된 메소드를 Arrays클래스가 제공하는 처럼, 컬렉션과 관련된 메소드를 제공하는 클래스입니다.

 

 

Collection vs Collections

Collection

Collections

인터페이스

클래스

 

 

 

컬렉션 동기화

멀티쓰레드(multi-thread)프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 있어 데이터의 일관성(consistency)) 유지하기 위해서는 공유되는 자원(객체) 대해 동기화(synchronization) 해야 합니다.

 

 

이전버전(JDK 1.2이전)

Vector Hashtable 같은 JDK 1.2이전의 클래스들은 자체적으로 동기화 처리를 합니다. 멀티쓰레드 프로그래밍이 아닌 경우에는 동기화가 불필요하여 성능을 떨어뜨리는 요인이 됩니다.

새로 추가된 ArrayList, HashMap 같은 컬렉션클래스들은 동기화를 자체적으로 제공하지 않고 필요한 경우에 java.util.Collections클래스의 동기화 메소드를 사용하여 동기화 처리를 하도록 변경되었습니다.

 

 

컬렉션 동기화 메소드

·       static Collection synchronizedCollection(Collection c)

·       static List synchronizedList(List list)

·       static Set synchronizedSet(Set s)

·       static Map synchronizedMap(Map m)

·       static SortedSet synchronizedSortedSet(SortedSet s)

·       static SortedMap synchronizedSortedMap(SortedMap m)

 

 

동기화 메소드 사용

List syncList = Collections.synchronizedList(new ArrayList());

 

 

 

변경 불가 컬렉션 생성하기

컬렉션에 저장된 데이터를 보호하기 위해서 컬렉션을 읽기전용으로 만들 있습니다.

주로 멀티쓰레드 환경에서 여러 쓰레드가 하나의 컬렉션을 공유할 경우 데이터가 손상될 있는데 이를 방지하기 위해서 사용합니다.

 

·       static Collection unmodifiableCollection(Collection c)

·       static List unmodifiableList(List list)

·       static Set unmodifiableSet(Set s)

·       static Map unmodifiableMap(Map m)

·       static NavigableSet unmodifiableNavigableSet(NavigableSet s)

·       static SortedSet unmodifiableSortedSet(SortedSet s)

·       static NavigableMap unmodifiableNavigableMap(NavigableMap m)

·       static SortedMap unmodifiabledSortedMap(SortedMap m)

 

 

 

싱글톤(singleton) 컬렉션 생성

인스턴스를 new연산자가 아닌 메소드를 통해서만 생성할 있어 인스턴스의 개수를 제한할 있는 싱글톤 기능을 통해 컬렉션을 생성합니다.

매개변수로 저장할 요소를 지정하면 해당 요소를 저장하는 컬렉션을 반환하며 반환된 컬렉션은 변경할 없습니다.

·       static List singletonList(Object o)

·       static Set singleton(Object o) //함수명이 singletonSet아님

·       static Map singletonMap(Object key, Object value)

 

 

 

종류의 객체만 저장하는 컬렉션 만들기

컬렉션에는 모든 종류의 객체를 저장할 있다는 장점이 있기도 하지만 이것이 단점이 되기도 합니다.

제네릭(generics)으로 컬렉션에 저장할 요소의 타입을 제한할 수도 있지만 호환성을 위해 제공합니다. 제네릭을 사용하기 위해서는 JDK 1.5부터 가능하며 이전으로 작성된 코드를 사용할 필요하게 됩니다.

대부분의 경우 종류의 객체만 저장하며 컬렉션에 지정된 종류의 객체만 저장하고자 경우에는 아래의 메소드를 사용하면 됩니다.

 

·       static Collection checkedCollection(Collection c, Class type)

·       static List checkedList(List list, Class type)

·       static Set checkedSet(Set s, Class type)

·       static Map checkedMap(Map m, Class keyType, Class valueType)

·       static Queue checkedQueue(Queue queue, Class type

·       static NavigableSet checkedNavigableSet(NavigableSet s, Class type)

·       static SortedSet checkedSortedSet(SortedSet s, Class type)

·       static NavigableMap checkedNavigableMap(NavigableMap m, Class keyType, Class valueType)

·       static SortedMap checkedSortedMap(SortedMap m, Class keyType, Class valueType)

 

 

사용 방법

번째 매개변수에 저장할 객체의 클래스를 지정합니다.

List list = new ArrayList();

//String.class으로 String 저장가능하도록 설정

List checkedList = checkedList(list, String.class);

checkedList.add("codedragon"); //정상 추가

checkedList.add(new Integer(3)); //ClassCastException 발생

 

 


Posted by codedragon codedragon

댓글을 달아 주세요