분류 전체보기
코틀린 - if [패스트 캠퍼스 챌린지 03일차]
if 다른 프로그래밍 언어와 사용법이 비슷하다 간단하게 예시 하나만 보겠다 if 안의 내용이 단순하면 중괄호 생략 가능하다 값을 리턴하는 if if를 조건에 따라서 흐름 제어할 때뿐만 아니라 조건에 따라서 결과값을 리턴할 때도 사용할 수 있다 예시를 보겠다 예시에서는 a가 b보다 크면 a를 리턴하고 그렇지 않으면 b를 리턴하게 된다 그리고 그 리턴 값은 max에 저장된다 다만 값을 리턴하는 if를 사용할 때는 주의사항이 있다 리턴 값을 갖는 if를 사용하려면 모든 경우에 대한 리턴 값이 있어야 된다 예시를 살펴보자 위의 예시의 경우 num1>num2인 조건, num1==num2인 조건 이외의 경우에 대한 리턴 값이 없어서 에러가 발생하게 된다 모든 경우에 대응하기 해주자 이것은 리턴 값을 갖는 if를 사..
코틀린 - 메소드 [패스트 캠퍼스 챌린지 02일차]
함수 선언 함수를 만드는 방법은 다음과 같다 fun 함수명 (변수명: 타입 ...) : 반환형 {} 두 인자를 받아서 더한 값을 반환해주는 함수를 한번 만들어 보았다 함수 호출 위에서 만든 plus 함수를 호출해 보겠다 차례대로 인자를 전달해도 되고 명시적으로 인자를 전달해 된다 디폴트 값을 갖는 함수 다음은 디폴트 값을 갖는 함수이다 second에 파라미터에 디폴트 값을 설정해 주었다 인자를 다 전달했을 때는 전달된 값을 이용하여 함수가 작동하고 디폴트 값을 갖고 있는 파라미터에 값을 전달하지 않았을 때는 디폴트 값을 이용하여 함수가 작동된다 인자를 다 전달하여 함수를 호출해보고 인자를 하나만 전달하여 함수를 호출해 보았다 반환 값이 없는 함수 반환 값으로 Unit을 주면 된다 참고로 Unit은 생략할..
코틀린 - 변수, 자료형, 연산자 [패스트 캠퍼스 챌린지 01일차]
변수 변수 선언 방법에는 var와 val 두 가지가 있다 먼저 var는 Variable로 값을 넣고 변경할 수 있다 val은 Value로 한번 초기화하면 값을 변경할 수 없다 자바의 final 개념이라고 보면 된다 var? val? 변수를 뭘로 선언할지 고민된다면 일단 그냥 val로 선언해주고 나중에 값을 변경할 일 있으면 그때 var로 바꿔주는 것을 추천한다 자료형 코틀린은 기본적으로 변수의 자료형을 명시해주지 않아도 자동으로 자료형을 판단해서 결정해준다 그래도 가독성 있게 명시적으로 자료형을 적어주자 변수명 뒤에 자료형을 명시적으로 써줄 수 있다 null을 가질 수 있는 변수 Int는 null을 가질 수 없는 자료형이다 하지만 변수를 선언할 때 자료형을 Int?로 하면 null을 가질 수 있다 그냥 ..
함수를 꾸며주는 데코레이터
데코레이터 여기 "hello"를 출력하는 hello함수가 있다 이 함수를 꾸며줄 수 있는 함수를 만들어 주겠다 original은 다른 함수를 받는 파라미터이다 wrapper는 함수를 꾸며줄 새로운 함수로 파라미터로 받은 함수를 꾸며줄 수 있다 현재 original로 받은 함수 앞 뒤로 "start", "end"를 print 해주었다 새로 만든 함수를 return 하면 된다 데코레이터 함수를 실행한 결과이다 이렇게 하면 좀 더 깔끔하게 나타낼 수 있다 @을 이용한 데코레이터 이번에는 데코레이터 함수를 먼저 작성하고 @을 이용하여 데코레이터를 해줄 수 있다 아래처럼 함수를 호출하면 위와 동일한 결과가 호출된다
이진 트리의 종류
이진 트리란? 각 노드가 최대 2개의 자식 노드를 가질 수 있는 트리이다 정 이진 트리 (Full Binary Tree) 모든 노드가 2개 또는 0개의 자식을 갖는 이진 트리이다 아래 그림처럼 3의 자식이 하나밖에 없는 경우는 정 이진 트리가 아니다 완전 이진 트리 (Complete Binary Tree) 마지막 레벨 직전의 레벨까지는 모든 노드들이 다 채워진 트리이다 마지막 레벨에서는 노드들이 모두 채워질 필요가 없더라도 왼쪽부터 오른쪽으로 노드들이 채워져야 한다 아래 그림처럼 마지막 레벨 직전까지의 레벨이 모두 채워졌지만 마지막 레벨에서 노드가 왼쪽에서부터 채워지지 않은 경우는 완전 이진 트리가 아니다 완전 이진 트리의 높이 완전 이진 트리에는 높이와 관련된 성질이 있다 완전 이진 트리 안에 n개의 ..
Direct Access Table과 Hash Table
다음과 같은 key-value쌍의 데이터를 저장하려고 한다 key-value쌍을 저장하는 기본적인 두 가지 방법에 대해 알아보자 Direct Access Table 배열의 인덱스로 바로 접근하는 방법이다 배열에서 인덱스를 순서가 아니라 key라고 생각하고 key-value쌍을 저장하는 방식이다 key를 바탕으로 배열의 인덱스에 데이터를 저장한다 '57'키는 배열의 57번 인덱스에 저장하고 '208'키는 배열의 208번 인덱스에 저장하고 '900'키는 배열의 900번 인덱스에 저장하면 된다 각 key에 해당하는 value를 알고 싶으면 해당 인덱스에 접근하면 된다 가장 큰 장점은 배열의 인덱스에 O(1)으로 바로 접근할 수 있다는 것이다 반면에 단점은 공간을 많이 낭비한다는 것이다 위의 예시를 보면 사용하..
더블리 링크드 리스트 연산의 시간 복잡도
더블리 링크드 리스트의 접근, 탐색, 삽입, 삭제 연산에 대하여 시간 복잡도를 알아보자 더블리 링크드 리스트의 접근, 탐색 연산 더블리 링크드 리스트의 접근, 탐색 연산은 싱글리 링크드 리스트의 접근, 탐색과 똑같다 head 노드부터 하나씩 다음 노드로 가면서 원하는 위치에 접근하거나 원하는 데이터를 가진 노드를 찾는다 시간 복잡도는 리스트의 길이 n에 비례하므로 O(n)을 갖는다 더블리 링크드 리스트의 삽입, 삭제 연산 삽입 연산의 경우 특정 노드가 주어졌을 때, 특정 노드의 앞과 뒤 노드의 레퍼런스만 바꿔주면 된다 링크드 리스트의 길이와 상관없이 항상 일정한 시간이 걸리므로 시간 복잡도는 O(1)을 갖는다 삭제 연산도 마찬가지로 레퍼런스만 바꿔서 연결만 끊어주면 되므로 링크드 리스트의 길이와 상관없이..
싱글리 링크드 리스트 연산의 시간 복잡도
싱글리 링크드 리스트의 접근, 탐색, 삽입, 삭제 연산에 대하여 시간 복잡도를 알아보자 싱글리 링크드 리스트의 접근 연산 링크드 리스트의 접근 연산은 해당 노드에 바로 접근이 불가하다 head에서부터 차근차근 다음 노드로 가서 원하는 노드에 접근을 해야 한다 인덱스 x에 있는 노드에 접근하려면 head에서부터 x번 가야 한다 원하는 노드에 접근하는데 걸리는 시간이 몇 번째 인덱스인지에 비례하는 것이다 링크드 리스트 안에 있는 노드의 수를 n이라고 하면 마지막 노드에 접근하려면 head에서부터 총 n-1번을 가야 한다 그러므로 접근 연산은 최악의 경우 O(n)의 시간 복잡도를 갖는다 싱글리 링크드 리스트의 탐색 연산 링크드 리스트의 탐색 연산은 선형 탐색을 이용한다 가장 앞에서부터 다음 노드를 하나씩 보면..
시간복잡도 분할 상환 분석(동적 배열의 추가 연산)
동적 배열의 추가(append) 연산 동적 배열의 추가 연산의 시간 복잡도를 계산해보자 다음과 같은 배열에 새로운 데이터를 추가한다고 하자 두 가지 경우에 대해서 생각해 볼 수 있다 1. 배열에 남는 공간이 있을 때 이 경우는 그냥 빈 공간에 데이터를 저장하면 되므로 시간 복잡도는 O(1)이다 2. 배열이 꽉 찼을 때 이 경우는 기존의 배열보다 큰 배열을 만들고 기존 배열에서 새로운 배열로 값을 다 복사해야 된다 기존 배열의 0번 인덱스에 접근해서 값을 복사하고 새 배열의 0번 인덱스에 접근해서 값을 붙여 넣고... 이미 있던 n개의 데이터를 복사해야 되므로 O(n)이 되고 새로운 데이터를 추가해야 되므로 O(1)이 되어 총 O(n+1) = O(n)이 된다 정리 배열에 남는 공간이 있을 때: O(1) 배..
NAS Docker 컨테이너 시작시 자동 실행할 명령 설정하기
/root 디렉토리로 이동한다 vim 으로 .bashrc 파일 열어준다 G를 눌러 파일의 맨 끝으로 이동해 준다 o를 눌러 커서 위치를 바로 다음 줄로 옮기고 입력 모드를 시작한다 이제 컨테이너가 시작하면 자동으로 실행할 명령을 넣어주면 된다 필자의 경우 장고 서버를 실행해주는 명령을 넣었다 ESC를 누른 후 :를 누른 후 wq를 입력하고 빠져나온다 컨테이너를 재시작 하면 명령이 자동으로 실행되는 것을 확인할 수 있다