[Python] 선택정렬
·
Algorithm/Python
선택정렬 데이터에서 최솟값을 찾아 그 값과 범위의 맨 앞에 있는 값을 서로 바꾸는 과정을 반복하는 알고리즘이다. 선택정렬 과정 예를 들어 [2, 4, 5, 1, 3] 가 있을 때, 가장 작은 값을 찾아 첫번째 값과 그 값을 바꾼다. (이미 정렬 완료된 값은 | 로 구분한다.) [2, 4, 5, 1, 3] # 가장 작은 값 : 1 첫번째 값 : 2 [1 | 4, 5, 2, 3] # 가장 작은 값 : 2 첫번째 값 : 4 [1, 2 | 5, 4, 3] # 가장 작은 값 : 3 첫번째 값 : 5 [1, 2, 3 | 4, 5] # 가장 작은 값 : 4 첫번째 값 : 4 //변화없음 [1, 2, 3, 4 | 5] # 자료가 5 하나만 남음. 종료 결과 [1, 2, 3, 4, 5] 선택정렬 알고리즘 def sel_..
[Python] 백준 1436 - 영화감독 숌
·
Algorithm
문제 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다. 종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2..
[Python] 순차탐색
·
Algorithm/Python
리스트에서 특정값을 찾아 그 값의 위치를 돌려주는 프로그램 def search_list(a, x): n = len(a) for i in range(n): if x == a[i]: return i return -1 v = [20, 19, 11, 27, 3] print(search_list(v, 11)) 결과 : 2 첫 번째 값부터 순서대로 비교한다. 만약 11을 찾을 경우 그 위치를 돌려준다. *3번째인 것 같지만 0부터 숫자를 세기 때문에 2를 돌려준다.
[Python] 백준 11729 - 하노이 탑 이동 순서
·
Algorithm
문제 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다. 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다. 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다. 이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다. 아래 그림은 원판이 5개인 경우의 예시이다. 입력 첫째 줄에 첫 번째 장대에 쌓인 원판의 개수 N (1 ≤ N ≤ 20)이 주어진다. 출력 첫째 줄에 옮긴 횟수 K를 출력한다. 두 번째 줄부터 수행 과정을 출력한다. 두 번째 줄부터 K개의 줄에 걸쳐 두 정수 A B를 빈..
[Python] 최대공약수 구하기
·
Algorithm/Python
첫 번째 방법 def gcd(a, b): i = min(a, b) #1 while True: if a % i == 0 and b % i == 0: # 2 return i #3 i -= 1 #4 print(gcd(60, 24)) 1. 두 수 중에 더 작은 수를 i에 저장한다. 2. i가 두 수의 공통된 약수인지 확인한다. 3. 만약 공통된 약수라면 결과값을 돌려주고 종료한다. 4. 아니라면 i를 1 감소시키고 2번으로 돌아가 반복한다. 두 번째 방법 def gcd(a, b): if b == 0: return a return gcd(b, a % b) print(gcd(60, 24)) 이 방법은 유클리드 알고리즘을 이용한 방법이다. a와 b의 최대공약수는 'b'와 'a를 b로 나눈 나머지'의 최대공약수와 같다..
[Python] 팩토리얼 구하기
·
Algorithm/Python
첫 번째 방법 def fact(n): f = 1 for i in range(1, n+1): f *= i return f print(fact(5)) for문을 사용하여 팩토리얼을 구하는 방법이다. 두 번째 방법 def fact(n): if n