알고리즘(66)
-
백준 1517 파이썬 병합정렬 손풀이 플레티넘
백준 1517 - 버블 소트 문제 https://www.acmicpc.net/problem/1517 1517번: 버블 소트 첫째 줄에 N(1 ≤ N ≤ 500,000)이 주어진다. 다음 줄에는 N개의 정수로 A[1], A[2], …, A[N]이 주어진다. 각각의 A[i]는 0 ≤ |A[i]| ≤ 1,000,000,000의 범위에 들어있다. www.acmicpc.net 답안 코드 : import sys input = sys.stdin.readline result = 0 def merge_sort(s, e): global result if e - s < 1: return m = int(s + (e - s) / 2) merge_sort(s, m) # 재귀 함수의 형태로 구현 merge_sort(m + 1, e..
2024.02.22 -
백준 2751 파이썬 병합정렬
백준 2751 - 수 정렬하기 2 문제 https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 답안 코드 : import sys input = sys.stdin.readline print = sys.stdout.write def merge_sort(s, e): if e - s < 1: return m = int(s + (e - s) / 2) merge_sort(s, m) merge_sort(m + 1, e) for i in range(s, ..
2024.02.21 -
백준 11004 파이썬 퀵 정렬
백준 11004 - k번째 수 문제 https://www.acmicpc.net/problem/11004 11004번: K번째 수 수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 답안 코드 : import sys input = sys.stdin.readline N, K = map(int, input().split()) A = list(map(int, input().split())) def quickSort(S, E, K): global A if S < E: pivot = partition(S, E) if pivot == K: # K번째 수가 pivot이면 더이상 구할 필요 없음 return..
2024.02.20 -
정수론 : 확장 유클리드 호제법
확장 유클리드 호제법 유클리드 호제법의 목적이 두 수의 최대 공약수를 구하는 것이라면 확장 유클리드 호제법의 목적은 방정식의 해를 구하는 것이다. 확장 유클리드 호제법을 제대로 이해하려면 수학 증명 과정까지 공부해야 한다고 하지만 여기서는 확장 유클리드 호제법 관련 문제를 풀기 위한 알고리즘만 설명하려고 한다. 확장 유클리드 호제법의 핵심 이론 확장 유클리드 호제법에서 해를 구하고자 하는 방정식 해를 구하고자 하는 방정식 ax + by = c (a, b, c, x, y는 정수) 이때 위 방정식은 c% gcd(a, b) = 0인 경우에만 정수해를 가진다. 다시 말해 c가 a와 b의 최대 공약수의 배수인 경우에만 정수해를 가진다. 이는 ax + by = c가 정수해를 갖게 하는 c의 최소값이 gcd(a, b..
2024.02.19 -
정수론 : 유클리드 호제법
유클리드 호제법 유클리드 호제법 euclidean-algorithm은 두 수의 최대 공약수를 구하는 알고리즘이다. 일반적으로 최대 공약수를 구하는 방법은 소인수 분해를 이용한 공통된 소수들의 곱으로 표현할 수 있지만 유클리드 호제법은 좀 더 간단한 방법을 제시한다. 유클리드 호제법의 핵심 이론 유클리드 호재법을 수행하려면 먼저 MOD 연산을 이해하고 있어야 한다. MOD 연산이 최대 공약수를 구하는 데 사용하는 핵심 연산이기 때문이다. MOD 연산 : 두 값을 나눈 나머지를 구하는 연산 MOD 연산을 이해하면 다음과 같은 3단계로 유클리드 호제법을 구현할 수 있다. MOD 연산으로 구현하는 유클리드 호제법 1 큰 수를 작은 수로 나누는 MOD 연산을 수행한다. 2 앞 단계에서의 작은 수와 MOD 연산 결..
2024.02.18 -
백준 1427 파이썬 선택 정렬 사용
백준 1427 - 소트인사이드 문제 https://www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 답안 코드 : import sys print = sys.stdout.write A = list(input()) for i in range(len(A)): Max = i for j in range(i + 1, len(A)): if A[j] > A[Max]: # 내림차순이므로 최댓값을 찾음 Max = j if A[i] 파이썬에서는 input 데이터를 list로 변환하면 자동으로 자릿수 나누어 리스트화 해준다. # ( 파이썬 짱 ) # 이번에도 그저 s..
2024.02.18