달력

12

« 2019/12 »

  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  


 

 

Collection 타입

·         kotlin.collections 패키지에는  Iterable, Collection, List, Set, Map 클래스하며 이클래스는 컬렉션 타입의 클래스입니다.

·         Collection 타입의 클래스들은 mutable객체(Read/Write) immutable 객체(Read Only)형태로 구분됩니다.

·         kotlin.collection.List 인터페이스로 표현되는 객체는 immutable형태이므로 size(), get() 함수만 제공됩니다.

·         kotlin.collection.MutableList 인터페이스로 표현되는 객체는 mutable형태이므로 size(), get() 함수 이외에 add(), set() 같은 함수도 제공됩니다.

 

 

 

상속도

수정 ...


 


 

 

 

Package kotlin.collections

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/index.html

 

 

 

 

Iterable

interface Iterable<out T>

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-iterable/index.html#kotlin.collections.Iterable

 

 

 

 

Collection

interface Collection<out E> : Iterable<E>

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-collection/index.html#kotlin.collections.Collection

 

 

 

MutableCollection

interface MutableCollection<E> : 

    Collection<E>, 

    MutableIterable<E>

 

 

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-collection/index.html

 

 

 

MutableIterable

interface MutableIterable<out T> : Iterable<T>

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-iterable/index.html

 

 

 

MutableList

interface MutableList<E> : List<E>, MutableCollection<E>

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/index.html

 

 

 

List

interface List<out E> : Collection<E>

 

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html#kotlin.collections.List

 

 

 

 

Set

interface Set<out E> : Collection<E>

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html#kotlin.collections.Set

 

 

 

Map

interface Map<K, out V>

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html#kotlin.collections.Map

 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

자료구조(data structure)

·       자료의 집합을 의미합니다.

·       자료를 효율적으로 컴퓨터에 저장하는 방법입니다.

·       자료(데이터) 어떻게 관리하고 처리하느냐에 대한 방법입니다.

·       원소들 사이의 관계가 논리적으로 정의된 일정한 규칙에 의하여 나열되며 자료에 대한 처리를 효율적으로 수행할 있도록 자료를 조직적, 체계적으로 구분하여 표현한 것을 나타냅니다.

 

 

 



Posted by codedragon codedragon

댓글을 달아 주세요


 

 

재귀 호출의 문제점 - 자원 효율성

시간과 메모리 공간의 효율이 저하될 있기 때문에 개발에 신중을 기해야 합니다

 

 

 

재귀 호출시 무한루프 문제 해결

·         자기가 자신을 호출할 있기 때문에 무한루프 문제가 발생할 있습니다. 재귀함수의 문제를 해결하기 위해 함수를 종료하고 반환할려면 return 추가해야 합니다.

·         재귀함수 호출 전에 종료하기 위한 조건 반드시 수행해주어야 합니다.

 

 

 

재귀적 함수 호출 조건

아래의 조건이 만족되어야 정상적인 결과를 얻을   있습니다.

·         재귀 호출

·         반드시 종결 조건

·         종결 조건이 만족할 때의 반환

 


Posted by codedragon codedragon

댓글을 달아 주세요


 

윤년(Leap year)

1년은 366일이 되며 이것이 바로 윤년이다. 지구가 태양을 바퀴 도는 데에는 365 5시간 48 46초가 걸리므로 365일을 제외한 시간들을 모아 태양력에서는 4년마다 2 29일을 두어 하루를 늘리고, 태음력에서는 평년이 354일이므로 계절과 역월(曆月) 조절하기 위하여 19년에 7번의 비율로 윤달을 끼워 1년을 13개월로 한다. 윤년이 아닌 해는 평년이라고 합니다.

http://bit.ly/2Sf4jrM

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

 

 

 

윤년에 대한 sudo code 알고리즘

if (year is not divisible by 4) then (it is a common year)

else if (year is not divisible by 100) then (it is a leap year)

else if (year is not divisible by 400) then (it is a common year)

else (it is a leap year)

http://bit.ly/2Sb1fNj

 

 

 

 

윤년 조건

조건을 만족해야 윤년입니다.

윤년 조건(1) 4 나누어 떨어지고, 100으로 나누어 떨어지지 않으면 윤년

윤년 조건(2) 400으로 나누어 떨어지면 윤년

 

 

 

 


 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

NPE(NullPointException)

·       Tony Hoare(토니 호어) 실수로 null 참조를 1965년에 처음 고안한 것으로 알려져 있습니다.

·       현재 null참조로 인해 다양한 언어에서 문제가 발생하기도 합니다.

 

Apologies and retractions

Speaking at a software conference called QCon London in 2009, he apologised for inventing the null reference:[23]

 

I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn't resist the temptation to put in a null reference, simply because it was so easy to implement. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years.

 

 

For many years under his leadership his Oxford department worked on formal specification languages such as CSP and Z. These did not achieve the expected take-up by industry, and in 1995 Hoare was led to reflect upon the original assumptions:[24]

 

Ten years ago, researchers into formal methods (and I was the most mistaken among them) predicted that the programming world would embrace with gratitude every assistance promised by formalisation to solve the problems of reliability that arise when programs get large and more safety-critical. Programs have now got very large and very critical well beyond the scale which can be comfortably tackled by formal methods. There have been many problems and failures, but these have nearly always been attributable to inadequate analysis of requirements or inadequate management control. It has turned out that the world just does not suffer significantly from the kind of problem that our research was originally intended to solve.

 

 


 

 

Tony Hoare(토니 호어)

http://codedragon.tistory.com/7976

 

 

 

null pointer

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

 


Posted by codedragon codedragon

댓글을 달아 주세요

 

 

key-value pair (키와 값의 )

(Key) 데이터 그룹 중에서 특정 (Value) 찾는데 열쇠가 된다는 의미로 붙여졌습니다. 그렇기 때문에 특정 값에 찾는 열쇠는 중복될 없습니다.

 

(, )

(key, value)

 

 

name="코드드레곤"

age=27

nation="korea"

 

 



Posted by codedragon codedragon

댓글을 달아 주세요

 

 

알고지즘을 표현하는 기본 스텝

·         알고리즘 구상

·         알고리즘을 의사 코드(pseudo code) 작성

·         의사 코드(pseudo code) 자바코드로 작성

 

1부터 N까지 더하는 재귀 함수

1부터 4까지의 합을 구하는 알고리즘 구상

1

1부터 4까지의 합은 1부터 3까지의 합에 4 더하면 됩니다.

2

1부터 3까지의 합은 1부터 2까지의 합에 3 더하면 됩니다.

3

1부터 2까지의 합은 1부터 1까지의 합에 2 더하면 됩니다.

4

1부터 1까지의 합은 그냥 1입니다.

 

 

 

알고리즘을 의사 코드(pseudo code) 작성

시작

    1. n 1 아니면, n 1부터 (n-1)까지의 합을 더한 값을 반환

    2. n 1이면, 그냥 1 반환

 

 

 

의사 코드(pseudo code) 자바코드로 작성

public static int recursiveSum(int n) {

// n 1이면, 그냥 1 반환

if (n == 1) {

return 1;

}

// n 1 아니면, n 1부터 (n-1)까지의 합과 더한 값을 반환

return n + recursiveSum(n - 1);   

}

 

 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

Selection Sort(선택정렬)

선택정렬(Selection Sort) 알고리즘은 반복적으로 특정 값을 정렬된 최종 위치에 배치시킴으로써 값들의 목록을 정렬한다. , 목록의 위치에 대해서 위치에 배치되어야 하는 값을 선택하고, 값을 곳에 배치하게 됩니다.

 


 

 

단계

설명


 

정렬되지 않은 데이터


 

3에서 시작합니다.

3 최소값에 넣고 오른쪽 방향으로 작은값이 있는지 비교해 갑니다.


 

오른쪽의 9 3보다 작지 않습니다.

그러므로 다음 오른쪽의 값과 비교를 진행하기 위해 넘어갑니다.


 

오른쪽의 6 3보다 작지 않습니다.

다음 비교를 위해 오른쪽으로 진행합니다.


 

1 3보다 작으므로 Minimum Value 집어넣고 3 1 1 3으로 서로 위치를 바꿔줍니다.

최소값이 변경되었으며 다시 오른쪽으로 진행하면서 비교합니다.


 

오른쪽의 2 1보다 작지않습니다.

다음 비교를 위해 오른쪽으로 진행해야 하지만 모든 요소를 순회했으므로 현재 비교는 종료됩니다.


 

다음 비교를 위해 비교값 위치를 다음으로 이동합니다.

어떤 값도 비교되지 않은 상태이므로 현재 값인 9 Minimum Value 됩니다.

비교를 위해 오른쪽으로 진행합니다.


 

오른쪽의 6 9보다 작습니다.

그러므로 Minimum Value 6으로 변경한

서로위치를 변경합니다.

다음 비교를 위해 오른쪽으로 진행합니다.


 

오른쪽의 3 6보다 작습니다.

그러므로 Minimum Value 3으로 변경한

서로위치를 변경합니다.

다음 비교를 위해 오른쪽으로 진행합니다.


 

오른쪽의 2 3보다 작습니다.

그러므로 Minimum Value 2 변경한

서로위치를 변경합니다.

다음 비교를 위해 오른쪽으로 진행합니다.


 

다음 비교를 위해 비교값 위치를 다음으로 이동합니다.

어떤 값도 비교되지 않은 상태이므로 현재 값인 9 Minimum Value 됩니다.

비교를 위해 오른쪽으로 진행합니다.


오른쪽의 6 9보다 작습니다.

그러므로 Minimum Value 6 변경한

서로위치를 변경합니다.

다음 비교를 위해 오른쪽으로 진행합니다.


 

오른쪽의 3 6보다 작습니다.

그러므로 Minimum Value 3 변경한

서로위치를 변경합니다.

모든 순회를 마쳤습니다.



 

다음 순회를 위해 위치를 오른쪽으로 이동합니다.

어떤 값도 비교되지 않은 상태이므로 현재 값인 9 Minimum Value 됩니다.

비교를 위해 오른쪽으로 진행합니다.

 



 

오른쪽의 6 9보다 작습니다.

그러므로 Minimum Value 6 변경한

서로위치를 변경합니다.

모든 순회를 마쳤습니다.


다음 순회를 위해 위치를 오른쪽으로 이동합니다.

어떤 값도 비교되지 않은 상태이므로 현재 값인 9 Minimum Value 됩니다.

비교를 위해 오른쪽으로 진행해야 하지만 비교할 값이 없으므로 선택 정렬을 종료합니다.

 

 

선택 정렬의 결과를 보면 1, 2, 3, 6, 9 정렬된 상태로 변경된 것을 확인할 있습니다.

 

 

 



Posted by codedragon codedragon

댓글을 달아 주세요



 

 

3차원 배열을 이용한 선형 리스트의 구현

 

분기별 XXX 판매량 리스트

 

1

년도\분기

1/4분기

2/4분기

3/4분기

4/4분기

2070

74

86

147

132

2080

175

209

251

312

 

2

년도\분기

1/4분기

2/4분기

3/4분기

4/4분기

2070

63

80

131

144

2080

169

178

239

320

 

 

2차원 배열로 구현

int sale[2][2][4] = {

{{74, 86, 147, 132},

{175, 209, 251, 312}},

{{63, 80, 131, 144},

{169, 178, 239, 320}}

};

논리적 메모리 구조

분기별 판매량 선형 리스트의 논리적 구조

 


 

 

물리적 메모리 구조

분기별 판매량 선형 리스트의 물리적 구조

3차원 배열의 물리적 저장방법은 두가지가 있습니다. (3차원 논리적 구조에 대해 1차원의 물리적 구조로 저장됩니다.)

 

 

 

 

3차원 배열의 물리적 저장 방법

3차원의 논리적 순서를 1차원의 물리적 순서로 변환하는 방법을 사용합니다.

 

·       우선 순서 방법(Plane Major Order)

·       우선 순서 방법(Column Major Order)

 

 

우선 순서 방법(Plane Major Order)

3차원 배열의 번째 인덱스인 번호를 기준으로 사용하는 방법입니다.

sale[0][0][0]= 74, sale[0][0][1]= 86, sale[0][0][2]=147, sale[0][0][3]=132, sale[0][1][0]=175, sale[0][1][1]=209, sale[0][1][2]=251, sale[0][1][3]=312,

sale[1][0][0]= 63, sale[1][0][1]= 80, sale[1][0][2]=131, sale[1][0][3]=144, sale[1][1][0]=169, sale[1][1][1]=178, sale[1][1][2]=239, sale[1][1][3]=320,


 

면의 개수가 ni이고 행의 개수가 nj이고, 열의 개수가 nk 3차원 배열 A[ni][nj][nk],

시작 주소가 α이고 원소의 길이가 , i j k 원소

 

A[i][j][k] 위치 = α + {(injnk) + (jnk) + k}

 

ni

면의 개수

nj

행의 개수

nk

열의 개수

α

시작 주소

원소의 길이

 

 

 

 

 

우선 순서 방법(Column Major Order)

3차원 배열의 마지막 인덱스인 번호를 기준으로 사용하는 방법입니다.

sale[0][0][0]= 74, sale[1][0][0]= 63, sale[0][1][0]=175, sale[1][1][0]=169,

sale[0][0][1]= 86, sale[1][0][1]= 80, sale[0][1][1]=209, sale[1][1][1]=178,

sale[0][0][2]=147, sale[1][0][2]=131, sale[0][1][2]=251, sale[1][1][2]=239,

sale[0][0][3]=132, sale[1][0][3]=144, sale[0][1][3]=312, sale[1][1][3]=320,


 

A[i][j][k] 위치 = α + {(knjni) + (jni) + i}

 

ni

면의 개수

nj

행의 개수

nk

열의 개수

α

시작 주소

원소의 길이

 

 

 

메모리 주소 출력결과 확인하기

 

메모리 주소 출력결과

C 컴파일러가 우선 순서 방법으로 3차원 배열을 저장함을 확인할 있습니다.

sale[0][0][0]= 74

sale[0][0][1]= 86

sale[0][0][2]=147

sale[0][0][3]=132

sale[0][1][0]=175

sale[0][1][1]=209

sale[0][1][2]=251

sale[0][1][3]=312

sale[1][0][0]= 63

sale[1][0][1]= 80

sale[1][0][2]=131

sale[1][0][3]=144

sale[1][1][0]=169

sale[1][1][1]=178

sale[1][1][2]=239

sale[1][1][3]=320

address:6422236, sale  0 =  74

address:6422240, sale  1 =  86

address:6422244, sale  2 = 147

address:6422248, sale  3 = 132

address:6422252, sale  4 = 175

address:6422256, sale  5 = 209

address:6422260, sale  6 = 251

address:6422264, sale  7 = 312

address:6422268, sale  8 =  63

address:6422272, sale  9 =  80

address:6422276, sale 10 = 131

address:6422280, sale 11 = 144

address:6422284, sale 12 = 169

address:6422288, sale 13 = 178

address:6422292, sale 14 = 239

address:6422296, sale 15 = 320

 

 

배열의 시작 주소 α=6422236, ni=2, nj=2, nk=4, i=1, j=1, k=2, =4

sale[1][1][2]=239 위치 = α+{(injnk)+(jnk)+k}

= 6422236+ {(124)+(14)+2}4

= 6422236+ 56 =

= 6422292

 

 


'Development > Algorithm, DataStructure' 카테고리의 다른 글

알고지즘을 표현하는 기본 스텝  (0) 2018.10.03
Selection Sort(선택정렬)  (0) 2018.09.11
3차원 배열을 이용한 선형 리스트의 구현  (0) 2018.09.05
Queue 활용 사례  (0) 2018.08.28
리스트(list)  (0) 2018.08.21
연결 리스트(Linked List)  (0) 2018.08.16
Posted by codedragon codedragon

댓글을 달아 주세요


  

Queue 활용 사례

·       OS CPU 연산 처리시 작업 대기

·       프린터가 출력하는 문서 대기 목록

·       동영상 스트리밍 서비스에서 컨텐츠 버퍼링시 활용

·       최근 열어본 문서 목록

·       매표소에서 사람들이 차례로 줄을 있고, 줄의 제일 앞에 있는 사람부터 표를 있습니다.

 


Posted by codedragon codedragon

댓글을 달아 주세요