코딩 도구(319)
-
정수론 : 확장 유클리드 호제법
확장 유클리드 호제법 유클리드 호제법의 목적이 두 수의 최대 공약수를 구하는 것이라면 확장 유클리드 호제법의 목적은 방정식의 해를 구하는 것이다. 확장 유클리드 호제법을 제대로 이해하려면 수학 증명 과정까지 공부해야 한다고 하지만 여기서는 확장 유클리드 호제법 관련 문제를 풀기 위한 알고리즘만 설명하려고 한다. 확장 유클리드 호제법의 핵심 이론 확장 유클리드 호제법에서 해를 구하고자 하는 방정식 해를 구하고자 하는 방정식 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 -
백준 11399 파이썬 삽입정렬 그리디
백준 11399 - ATM 문제 https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 답안 코드 : N = int(input()) A = list(map(int, input().split())) S = [0]*N # 합 배열 for i in range(1, N): # 삽입 정렬 insert_point = i insert_value = A[i] for j in range(i-1, -1, -1): if A[j] 그리디 # N의 최대값이 1,000 그리고 시간제한 1초니까 n^2이하 ..
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 -
정수론 : 오일러 피
오일러 피 오일러 피 함수 P[N]의 정의는 1부터 N까지 범위에서 N과 서로소인 자연수의 개수를 뜻한다. 오일러 피 함수는 증명 과정을 공부해야 완벽하게 알 수 있다고하지만 실제 코딩 테스트에 사용하기 위한 구현 부분만 알아보겠다. 오일러 피의 핵심 이론 오일러 피 함수의 원리는 에라토스테네스의 체와 비슷하다. 오일러 피 함수의 원리 1 구하고자 하는 오일러 피의 범위만큼 리스트를 자기 자신의 인덱스값으로 초기화한다. 2 2부터 시작해 현재 리스트의 값과 인덱스가 같으면(= 소수일 때) 현재 선택된 숫자(K)의 배수에 해당하는 수를 리스트에 끝까지 탐색하며 P[i] = P[i] - P[i]/K 연산을 수행한다(i는 K의 배수). 3 리스트의 끝까지 과정 2 를 반복하여 오일러 피 함수를 완성한다. 수학..
2024.02.17 -
백준 2750 파이썬 정렬(sort함수 사용x) 직접 구현
백준 2750 - 수 정렬하기 문제 https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 답안 코드 : N = int(input()) A = [0]*N for i in range(N): A[i] = int(input()) for i in range(N-1): for j in range(N-1-i): if A[j] > A[j+1]: temp = A[j] A[j] = A[j+1] A[j+1] = temp for i in range(N): print(A[i]) ..
2024.02.17