{Programing}/Algorithm(21)
-
알고리즘 - 완전 탐색 응용
1.무식하게 전체 반복 : for 문과 if문을 이용해 전체를 다 훑어보는 방법. 2. 비트마스크 : 이진수의 각 비트를 배열의 요소로 생각해 0은 없는 것, 1은 있는 것으로 판단. 비트연산을 이용해 각 자리를 조작. OR연산을 이용해 켜고 싶은 비트를 켠다. AND와 NOT연산을 이용해 끄고 싶은 비트를 끈다. XOR 연산을 이용해 토글 하고싶은 비트를 토글한다. 최하위 비트부터 i개를 전부 켜기 위해서는 SHIFT와 - 연산을 이용. (mask = (1
2020.03.13 -
알고리즘 - 비트연산 응용
입력한 수가 2^n 꼴인지 확인하시오 비트연산자를 응용한다. 2^n 꼴의 수는 2진법으로 표현하면 비트에서 무조건 한자리만 1이고 나머지는 전부 0이다. 비트연산자는 이진수에 대해 비트단위로 적용되는 연산이다. NOT : 비트 반전. 0은 1로 1은 0으로 반전한다. OR : 두 이진비트중 하나라도 1이면 1. 둘다 0 이면 0 AND : 두 이진비트 둘다 1이여야 1. 하나라도 0이면 0 XOR : 두 이진비트가 서로 달라야 1. 같으면 0 SHIFT : 입력한 자리수만큼 전체 비트를 좌 or 우로 민다. 단항연산자 - : 부호 반전. 이진수에 NOT 연산을 한뒤 1을 더하는 연산. 2^n 꼴을 판단하기 위해서는 자기 자신의 부호반전 값과 AND 연산을 한 경우를 따진다. ex) 34 의 2진법 표현 ..
2020.03.13 -
알고리즘 - 퀵 정렬(Quick Sort)
단순 비교를 이용한 정렬을 수행. 분할 정복 알고리즘의 일종으로 엄청 빠름. 이후 나올 합병정렬(Merge Sort)와는 다르게 '비균등'하게 분할한다. 1. 기준점,피벗(Pivot)을 고른다. 2. 피벗을 기준으로 작은건 왼쪽, 큰건 오른쪽으로 전부 옮긴다. 3. 피벗을 제외하고 분할된 왼쪽 리스트, 오른쪽 리스트에 대해 각각 1~2를 반복. 4. 리스트가 더 안쪼개질때까지 반복(리스트 크기가 0이나 1이 될 때) 5. 끝내면 완성! 기본 연산. 분할 : 피벗을 기준으로 입력 배열(리스트)를 2개로 나눔. 정복 : 분할된 배열을 정렬. 배열이 크면 순환호출을 이용해 다시 분할. 결합 : 정렬이 끝난 부분 배열을 하나의 배열로 합친다. 장점 : 속도가 빠름. 정렬 알고리즘 중 최고속. 추가 메모리 공간이..
2020.03.11 -
알고리즘 - 버블 정렬(Bubble Sort)
서로 붙은 두 요소를 비교해 정렬. 앞에서부터 순차적으로 비교해서 교환하며 맞는 위치까지 계속 이동. 자연스레 기준에 따라 오름차순이면 큰 수가 끝쪽으로, 작은 수가 앞쪽으로 이동됨. 장점 : 구현이 간단. 비교-교환 만 구현하면 됨. 단점 : 불필요한 교환이 발생함. 이미 맞는 위치임에도 교환되거나, 많은 비교및 교환이 일어남. 성능 구데기 구현때문이면 차라리 삽입정렬이나 선택정렬을 쓰자
2020.03.11 -
알고리즘 - 삽입 정렬(Insertion Sort)
카드 정렬 방식으로 자료를 정렬. 정렬할 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열과 비교하여, 자신의 위치를 찾아 '삽입' 1. 배열의 두번째 요소부터 정렬을 시작. 2. 선택한 요소의 왼쪽의 모든 요소와 비교하여 위치를 찾아 '삽입' 3. 배열의 마지막 요소까지 진행하면 끝. 장점 : 안정적. 대부분 정렬된 배열에 대해서는 효율적인 정렬. 요소가 적으면 유리. 단점 : 비교적 많은 요소의 이동이 포함됨. 요소 수가 많고 크기가 크면 적합하지 않음.
2020.03.11 -
알고리즘 - 선택 정렬(Selection Sort)
가장 기초적인 정렬 알고리즘. 정렬 위치에 따라 어떤 값을 넣을지 '선택' 하는 알고리즘. 배열 or 리스트 를 사용하며 추가적인 메모리가 필요하지 않은 정렬방법. 1. 주어진 배열 중 최솟값을 찾음. 2. 그 값을 맨 앞의 요소로 교체 3. 두번째 위치부터 반복. 4. 맨 끝 하나의 요소만 남을 때까지 1~3을 반복. 요소 하나를 '선택' 해서 정렬되지 않은 모든 요소와 비교하며 맞는 정렬위치를 찾아가는 정렬 방법. 알고리즘이 순환하는 시기마다 1회차에는 가장 작은 요소, 2회차에는 두번째로 작은 요소를 '선택'해 나머지와 비교한다. 장점 : 반복회수가 미리 결정. 단점 : 안전성이 만족되지 않는다. 같은 값의 요소가 있다면 상대적인 위치가 변경될 수 있다.
2020.03.11