본문 바로가기

전체 글67

정렬 알고리즘 기본 (버블, 선택, 삽입정렬) 버블 정렬인접한 두 개를 비교해서, 교환한다.a= [-2, 45, 0, 11, -9]for step in range(len(a)-1): #...(1) for i in range(len(a)-1-step): #...(2) if a[i] > a[i+1]: a[i],a[i+1] = a[i+1],a[i] #...(3)시간 복잡도 (원소개수: n)(1) for 루프 n-1 번 반복(2) for 루프 n-1,n-2, ..., 2, 1번 반복(3) 교환은 상수 시간 작업=> T(n) = O(n^2) 한 번 회전했을 때, 요소들 중 가장 큰 값이 맨 뒤로 밀려나는 결과가 나온다.따라서 두번째 회전에서는 맨 뒤 요소를 제외하고 정렬을 수행하면 된다.이와 같은 원리로 세번째 회전에서는 맨 뒤-1, 맨.. 2026. 4. 12.
Python으로 기초 수학 공식 구현하기 (직접 구현, 파이썬 라이브러리) 1. 최대공약수1) 직접 구현 : 유클리드 호제법def gdc(a,b): while b: a, b = b, a%b return(a) 2) 라이브러리 활용import mathgcd_val = math.gcd(a,b) 2. 최소공배수1) 직접 구현 : 최대공약수 이용def lcm(a,b): return (a*b) // gcd(a,b) 2) 라이브러리 활용import mathlcm_val = math.lcm(a,b) 3. 조합arr 배열에서 원소 개수가 r개인 조합 뽑기1) 직접 구현r= 2일 경우, 이중 for문으로 인덱스를 조정하면서 구할 수 있다.def combination(arr): for i in range(len(arr)): for j in range(i + 1, .. 2026. 3. 24.
[백준/골드5] 2011번: 암호코드 문제상근이와 선영이가 다른 사람들이 남매간의 대화를 듣는 것을 방지하기 위해서 대화를 서로 암호화 하기로 했다. 그래서 다음과 같은 대화를 했다.상근: 그냥 간단히 암호화 하자. A를 1이라고 하고, B는 2로, 그리고 Z는 26으로 하는거야.선영: 그럼 안돼. 만약, "BEAN"을 암호화하면 25114가 나오는데, 이걸 다시 글자로 바꾸는 방법은 여러 가지가 있어.상근: 그렇네. 25114를 다시 영어로 바꾸면, "BEAAD", "YAAD", "YAN", "YKD", "BEKD", "BEAN" 총 6가지가 나오는데, BEAN이 맞는 단어라는건 쉽게 알수 있잖아?선영: 예가 적절하지 않았네 ㅠㅠ 만약 내가 500자리 글자를 암호화 했다고 해봐. 그 때는 나올 수 있는 해석이 정말 많은데, 그걸 언제 다해.. 2026. 3. 23.
[백준/골드5] 2225번: 합분해 문제0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오.덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다.입력첫째 줄에 두 정수 N(1 ≤ N ≤ 200), K(1 ≤ K ≤ 200)가 주어진다.출력첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.예제 입력 1 20 2예제 출력 1 21예제 입력 2 6 4예제 출력 2 84 풀이덧셈 경우의 수이므로, 이전 결과가 이후 결과에 영향을 준다 -> DPDP[i][j] => i를 j(0 점화식을 구하는 것이 핵심이다.처음에는 무작정 표를 그려서 풀다가, 정확한 경우의 수를 계산하지 못해서 올바른 점화식을 구하지 못했다.일.. 2026. 3. 23.
[백준/실버2] 1699번: 제곱수의 합 문제어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다. 이 경우, 수학자 숌크라테스는 “11은 3개 항의 제곱수 합으로 표현할 수 있다.”라고 말한다. 또한 11은 그보다 적은 항의 제곱수 합으로 표현할 수 없으므로, 11을 그 합으로써 표현할 수 있는 제곱수 항의 최소 개수는 3이다.주어진 자연수 N을 이렇게 제곱수들의 합으로 표현할 때에 그 항의 최소개수를 구하는 프로그램을 작성하시오.입력첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 100,000)출력주어진 자연수를 제곱수의 합으로 나타낼 때에 그 제곱수 항의 최소 .. 2026. 3. 16.
[백준/실버3] 2579번: 계단 오르기 (Python) 문제계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다.예를 들어 와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다.계단 오르는 데는 다음과 같은 규칙이 있다.계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다.마지막 도착 계단은 반드시 밟아야 한다.따라서 첫 번째 계단을 밟고 이어 두.. 2026. 3. 16.