본문 바로가기
반응형

정렬4

[BOJ 2437] 저울 (C++) www.acmicpc.net/problem/2437 2437번: 저울 하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓 www.acmicpc.net 구현 방법 이 문제를 해결하기 위해 긴 시간 고민하다가, 도저히 풀이 방법이 떠오르지 않아 검색을 해서 풀이 방법을 검색해본 문제입니다. 그리디 문제인 것도 알겠고, 정렬을 해서 어떻게 하면 될 것 같았는데 결국 해답을 찾지 못했습니다. 제가 찾은 방법은 다음과 같았습니다. 입력받은 원소를 오름차순으로 정렬하고, 첫 번째 원소부터 더해 주는 누적합을 계산합니다. 누적합을 계산해 나가다가 다음 원소가 누적 합보다 크면 (누.. 2021. 4. 21.
[알고리즘] 병합 정렬 (Merge Sort) 알고리즘 병합 정렬(Merge Sort)의 알고리즘은 다음과 같습니다. [일단 반으로 나누고, 나중에 병합해 준다] 정렬할 배열을 모두 크기가 1인 개별 배열인 상태로 시작합니다. 크기가 1이었던 배열들을 크기가 2인 배열로 묶으면서 정렬을 수행합니다. 모두 합칠 때까지 반복합니다. 예를 들어 다음 배열을 정렬해보겠습니다. [4 , 6 , 8 , 1 , 3 , 5 , 7 , 2 ] 1) 정렬할 배열은 모두 크기가 1인 개별 배열인 상태로 시작합니다. [ 4 ] [ 6 ] [ 8 ] [ 1 ] [ 3 ] [ 5 ] [ 7 ] [ 2 ] 2) 배열을 합치면서 정렬을 수행합니다. [ 4 , 6 ] [ 1 , 8 ] [ 3 , 5 ] [ 2 , 7 ] ↓ [ 1 , 4 , 6 , 8 ] [ 2 , 3 , 5 ,.. 2021. 2. 14.
[알고리즘] 퀵 정렬 (Quick Sort) 알고리즘 퀵 정렬(Quick Sort)의 알고리즘은 다음과 같습니다. 정렬의 기준 값인 피봇(Pivot) 값을 설정합니다. 피봇 값보다 큰 숫자를 왼쪽부터 찾고, 피봇 값보다 작은 숫자를 오른쪽부터 찾습니다. 만약 작은 숫자의 index가 큰 숫자의 index보다 작으면 엇갈린 상황으로, 왼쪽의 작은 값과 피봇 값의 위치를 바꿔줍니다. 큰 숫자와 작은 숫자의 위치를 바꿔줍니다. 이를 배열이 정렬될 때까지 반복합니다. 이렇게 보면 처음에는 무슨 말인지 이해하기 어렵습니다. 예를 들어 다음 배열을 정렬해보며 쉽게 이해해 봅시다. [4 , 6 , 8 , 1 , 3 , 5 , 7 , 2 , 10 , 9] 1-1) 피봇 값을 선택합니다. 보통 첫 번째 원소를 피봇 값으로 설정합니다. 피봇 값 = 4 피봇 값인 4.. 2021. 2. 14.
[알고리즘] 버블 정렬 (Bubble Sort) 알고리즘 버블 정렬(Bubble Sort)의 알고리즘은 다음과 같습니다. 첫 번째 원소부터 마지막 원소까지 바로 옆에 있는 원소와 비교해 작은 값을 앞으로 옮겨줍니다. 첫 번째 원소부터 마지막 이전 원소까지 바로 옆에 있는 원소와 비교해 작은 값을 앞으로 옮겨줍니다. 정렬될 때까지 이를 반복 예를 들어 다음 배열을 정렬해 보겠습니다. [4 , 6 , 8 , 1 , 3 , 5 , 7 , 2 , 10 , 9] 1-1) 4 와 6 비교해 4 7이니 8과 7 위치 변경 [4 , 6 , 1 , 3 , 5 , 2 , 8 , 7 , 9 , 10] [4 , 6 , 1 , 3 , 5 , 2 , 7 , 8 , 9 , 10] 2-8) 8 과 9 비교해 8 array[j + 1]) { temp = array[j]; array.. 2021. 1. 31.
반응형