-
[백준] 24090번 알고리즘 수업 - 퀵 정렬 1(python)Python/BAEKJOON 2023. 7. 2. 16:02728x90
문제)
알고리즘)
- 문제에서 퀵 정렬에 대한 기본 틀이 주어져있습니다. 이를 기반으로 코드를 작성
- 여기서 pivot는 배열의 맨끝 데이터를 기준으로 진행
- Result는 입력으로 주어진 c에 해당하는 교환 데이터를 출력하는 것 입니다.
- 교환이 이루어지는 부분마다 조건문으로 cnt와 c를 비교해서 빠져나오게 구성합니다.
* 재귀 알고리즘이 포함하는 문제에서는 재귀의 깊이를 설정하는 코드를 필수로 해주셔야합니다.
pypy에서는 딱히 하지 않아도 됩니다.
sys.setrecursionlimit(int(1e6))
코드)
#알고리즘 수업 - 퀵 정렬 1 import sys sys.setrecursionlimit(int(1e6)) #재귀 깊이제한 input = sys.stdin.readline def partition(start,end): global c, cnt, arr pivot = arr[end] i = start-1 for j in range(start,end): if arr[j] <= pivot: #pivot보다 작은 데이터 찾기 i +=1 arr[i], arr[j] = arr[j], arr[i] cnt += 1 if cnt == c: print(arr[i], arr[j]) if i+1 != end: #pivot의 위치 변환 arr[i+1], arr[end] = arr[end], arr[i+1] cnt += 1 if cnt == c: print(arr[i+1], arr[end]) return i+1 def quick_sort(start, end): if start >= end: return q = partition(start, end) print(arr) quick_sort(start, q-1) quick_sort(q+1, end) if __name__ == "__main__": n, c = map(int, input().split()) arr = list(map(int, input().split())) cnt = 0 quick_sort(0, len(arr)-1) if c > cnt: print(-1)
728x90'Python > BAEKJOON' 카테고리의 다른 글
[백준] 21921번 블로그(python) (0) 2023.01.02 [백준] 2667번 단지번호붙이기(python) (0) 2022.06.22 [백준] 11047번 동전 0(python) (0) 2022.03.26 [백준] 1057번 토너먼트(python) (0) 2022.03.26 [백준] 2579번 계단오르기(python) (0) 2022.03.26