본문 바로가기
반응형

개발/기본) 기본기75

기본기)정렬)c#) 셸 정렬(Shell Sort) 셸 정렬(Shell Sort) 가장 오래된 정렬 알고리즘 중 하나로 삽입 정렬의 단점을 보완한 알고리즘이다. 삽입 정렬이 어느 정도 정렬된 배열에 대해서는 빠른 것에 단점을 보안해서 만든 것으로 정렬해야 할 노드의 리스트를 k번째 요소를 추출해서 부분 리스트를 만든다. 이때 간격(Gap)을 기준으로 부분 리스트를 순차적으로 만든다. 간격의 초기값은 정렬할 크기 / 2, 생성된 부분 리스트 개수는 grap과 같다. 각 회전마다 간격 k를 절반으로 줄이면서 회전이 반복될 때마다 부분 리스트에 포함된 값은 증가한다. gap은 홀수로 하는 것이 좋다. gap이 1이 될때까지 반복한다. 배열 10, 8, 6, 20, 4, 3, 22, 1, 0 , 15, 16을 정렬할 때를 예시로 보면 다음과 같다. 코드는 다음과.. 2020. 8. 29.
기본기)정렬)c#) 삽입 정렬(Insert Sort) 삽입 정렬(Insert Sort) 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다. 매 순서마다 해당 노드를 삽입할 수 있는 위치를 찾아 해당 위치에 넣는다. 데이터를 하나씩 저장 이후에 순서를 넣는 방식이다. public void SetInsertSort(List _list){ Logger.LogFormat("[Insert - Sort] Start "); int j, key; for(int i = 1; i =0 && _list[j]> key); j--){ _list[j + 1] = _list[j]; } _list[j + 1 ] =key; thi.. 2020. 8. 29.
기본기)정렬)c#) 선택정렬(Select Sort) 선택정렬(Select Sort) 선택정렬은 첫번째 노드와 두번째 노드부터 마지막 노드까지 차례대로 비교하며 가장 작은 값을 찾아 첫번재에 놓고, 두번째에서 세번째 노드부터 마지막 노드까지의 데이터를 다시 비교하는 방식으로 이 과정을 반복해서 정렬을 수행한다. 1회전을 수행하고 나면 가장 작은 값이 맨 앞에 오기 때문에 그 값을 제외한 나머지 값을 비교한다. 점점 정렬될수록 비교하는 대상이 줄어든다. 배열에 7 4 5 1 3 의 값이 있을 경우는 다음과 같다. 1회전에서는 첫번째 인덱스와 다음인덱스를 비교하며 가장 작은 값을 변경한다. 2회전에서는 두번째 인덱스와 다음 인덱스를 비교하며 가장 작은 값을 변경한다. 마지막 인덱스 전까지 반복한다. public void SetSelectSort(List _li.. 2020. 8. 29.
기본기)정렬)c#) 버블 정렬(Bubble Sort) 버블 정렬(Bubble Sort) 서로 인접한 두 노드를 검사하여 정렬하는 알고리즘 인접한 2개의 노드를 비교해서 크기가 비교 후 정렬 기준에 따라 서로 교환을 한다. 배열에 7 4 5 1 3 의 값이 있을 경우 처음 값인 7을 인접한 노드를 검사한다. 7보다 큰 값이 없으므로 7은 가장 끝에 위치하게 된다. 이런 식으로 모든 인덱스를 비교할 때까지 정렬을 한다. 코드는 다음과 같다. public void SetBubbleSort(List _list){ Logger.LogFormat("[Bubble - Sort] Start "); for(int i =_list.Count-1;i>0 ;i--){ for(int j = 0;j _list[j+1]){ int temp.. 2020. 8. 29.
기본기)Array 와 List 의 차이점 Array 와 List 의 차이점 작업을 하다보면 Array와 List의 차이를 모르고 사용하는 분들이 종종 계신다. 면접문제에서도 간단하게 물어볼수 있는 항목으로 기본적으로 이해하고 가면 좋다고 생각한다. Array 인덱스를 통한 검색이 용의함 연속적인 메모리의 할당 정적인 표현 * 데이터의 크기가 정해져 있고 추가적인 삽입과 삭제가 일어나지 않는 경우에 사용하는 것을 추천한다. List 불연속적인 메모리 공간 할당 포인터를 통한 접근 동적인 표현 *데이터의 크기가 정해져 있지 않고 추가적인 삽입이나 삭제가 빈번히 일어나고 검색이 적은 경우에 추천한다. ArrayList - Object 클래스를 데이터로 받는 Array와 List를 합친 구조 - Reference Type을 넣으면 상관없지만 Value.. 2020. 8. 11.
기본기) 우선순위 큐(Priority Queue) 우선순위 큐(Priority Queue) Queue에 우선순위에 대한 기능이 추가된 확장된 개념이다. 큐의 기본 메서드인 'Push', 'Pop', 'Top' 등등을 사용한다 Pop(가져오는 과정)에서 제일 먼저 들어온 데이터를 반환하지 않고 현재 우선순위 큐 내부에서 가장 우선순위가 높은 데이터를 반한 한다. 우선순위 큐는 보통(heap)이라는 자료구조로 구현되고 내부는 정렬을 기본적으로 처리된다. '모든 정점은 자신의 자식보다 우선순위가 높다'. 시간 복잡도는O(logN)가 되고 내부는 역시 이진트리로 되어있다. ★☆☆☆☆ 2020. 5. 11.
기본기) Extends와 Implements의 차이점 Extends와 Implements의 차이점 코드를 작업하다보면 상속(Inheritance)를 하게된다. 상속이란. 부모의 속성이나 값, 메소드등을 물려받는것을 의미하는데. 작업을 하다보면 ' Base Class'를 만들고 기본이 되는 속성을 처리를 하게된다. 상속은 단일 Extends와 Implement의 차이점으로는 같은 상속의 기능을 제공하지만 Implement는 구현부를 항상 구현을 해줘야 하고 다중 상속이 가능하다. Implements는 상속이라는 개념보다는 구현을 하는 처리에 가깝다. Implements를 사용하면 메서드를 구현을 항상 해야 한다. 하지 않으면 컴파일러 오류가 발생한다. 어떤 정형화된 명령어나 변수를 사용하는 곳에서는 Extends로 상속을 권장하고 ( 베이스가되는 기본이 되는.. 2019. 11. 15.
기본기) 정규표현식 RegExp-(Regular Expression) 정규표현식 RegExp-(Regular Expression)  정규 표현식 또는 정규식은 특정한 규칙을 가진 문자열을 표현하는데 사용하는 형식 언어이다.정규 표현식은 문자열을 검사하는데 많이 사용한다.  정규 표현식의 기본 문법은 여러가지가 있는데 대표적인것들은 다음과 같다. 1. 패턴 그대로의 검색2. 메타 문자 및 한정된 검색3. 그룹으로의 검색 문자의미예^문자열의 시작. [...] 내에서 쓰이면 “일치하지 않는“의 의미가 된다.^http는 문자열의 맨 처음에 http가 온 경우에 매치한다. (중간에 http가 나타난 경우는 매치하지 않음)$문자열의 끝them$은 문자열이 them으로 끝난 경우에 them에 매치한다.\b단어의 경계. 공백, 탭, 컴마, 대시 등이 올 수 있다.\bplay\b는 pla.. 2019. 11. 6.
기본기)메타파일 (Meta File) 메타 파일(Meta File) 파일을 정의하는 파일. 서로 다른 형식으로 그래픽 정보를 표현하는 컴퓨터 그래픽 프로그램 사이에서 자유로운 정보의 교환을 위하여 사용되는 그래픽 정보의 저장 파일 형식을 말한다. 어떤 정보를 어떤 형태로 저장하는가에 따라 달라지는데 엔진을 사용하면 대부분 엔진에서 자동으로 갱신 or 생성을 시켜준다. 파일의 갱신여부나 어떤 링크라던지 많은 정보들을 같이 포함하는 정보이다. 많은 형상 관리하는 툴들은 이 메타 파일을 기반으로 변경 여부를 판단한다. 메타 파일이 꼬이면.. 큰일 난다.. 다시 파일을 로드할 수 있게 편법으로 '삭제 - 다시 새로 생성 or 붙여 넣기'를 하게 된다. 메타 파일을 여러 사람이 같이 작업할 때 유독 조심해야 한다.ㅠㅠ ★★★★☆ 2019. 11. 4.
기본기) 메모리풀(Memory Pool ) 오브젝트 풀(Object Pool) 메모리풀(Memory Pool ) 오브젝트 풀(Object Pool) 어떤 상황에서 메모리를 할당을 해서 사용을 하고 다시 또 같은 상황으로 인해서 메모리를 사용해야 하는 경우 재사용하기 위해서 여러 개를 가지고 사용이 모두 끝난 경우에 해제해주는 것을 메모리 풀이라고 한다. 오브젝트 풀( object pool )도 비슷한데 대상이 메모리가 아니고 오브젝트 객체인 것인데 이때는 메모리랑 다르게 사용 여부 플래그를 변경하고 값을 초기화함으로 재사용을 하는 것을 말한다. 자주 반복적으로 사용하는 메모리나 객체는 풀 방식으로 예상치의 최댓값을 미리 세팅하고 사용하면 좋다. 게임에서는 로딩을 하는 화면에서 사운드라던지 이펙트 특정 상황에서 항시 필요한 스코어라던지 대미지 표기 폰트 등을 많이 풀링(Pooling.. 2019. 10. 31.
코드규칙) 스네이크 표기법(Snake Casing Notation) 스네이크 표기법(Snake Casing Notation) 스네이크 표기법은 한 문자 단어마다 _(underScore)를 붙여서 의미를 부여하는 방식을 말한다. 예시는 다음과 같다. int unit_type; int unit_index; *변수명, 함수명, 상수값, 네임스페이스등에서 사용하는것을 권장한다. ★☆☆☆☆ 2019. 10. 23.
기본기) 유효자리수 유효자리수 유효자리수라는 것은 자료형의 범위를 말한다. 유효자리수의 범위를 잘 이해해야 정수와 실수 또는 자료형의 형변환(Type Casting)을 할때 생각지도 못한 버그를 예방할 수 있다. 데이터를 저장하는 과정에서도 데이터의 범위는 매우 중요하다. 데이터의 크기보다 더 큰 크기의 데이터를 넣게되면 데이터의 이상현상이 생긴다. (대부분 짤리거나 오버플로우가 발생한다) 유효자리수는 컴파일과 개발언어에 따라 다르다. 가장 대표적으로 알고있어야하는 실수의 유효자리수에 대해서 알아보면 다음과 같다. (C 기반) ★★☆☆☆ 2019. 10. 23.
코드규칙)파스칼 표기법(Pascal Casing Notation) 파스칼 표기법(Pascal Casing Notation) 모든 단어의 첫번째 문자를 대문자로 표현하는 표기법이다. 일반적으로 가장 많이 사용되는 방식이라고 한다. 예시는 다음과 같다. int Count SetState(_state : eTYPE) *함수와 클래스명은 대체적으로 파스칼 표기법을 권장한다. ★★☆☆☆ 2019. 10. 23.
코드규칙) 헝가리언 표기법(Hungarian Casing Notation) 헝가리언 표기법(Hungarian Casing Notation) 헝가리언 표기법은 마이크로소프트 내부에서 널리 사용하는 표기법이다. 모든 변수 타입을 이름 앞에서 붙여 넣으면 된다. 예시는 다음과 같다. pLast -어떤 데이터 구조에 속한 마지막 요소의 포인터(p) sBookname -책이름이라는 문자열(s)을 의미한다. bool g_bInit = false; int nCount = 0; *자료형이 존재하는 변수에 주로 사용한다. ★☆☆☆☆ 2019. 10. 22.
코드규칙) 카멜 표기법(Camel Casing Notation) 카멜 표기법(Camel Casing Notation) 단어와 단어 사이를 점이나 공백 없이 대소문자로 표현하는 방식인이다. 낙타의 혹처럼 들쑥날쑥 한 모양으로 구분한다는 것에서 이름이 유래하였다. 자바스크립트에서는 카멜 표기법이 기본적으로 사용된다. 예시는 다음과 같다. document.getElementById('name') getElementById (get-element-by-id)를 카멜 표기법으로 구현한 것이다. * Java 프로그래밍에서 권장하는 표기법이다. ★★☆☆☆ 2019. 10. 22.
반응형