반응형

분류 전체보기 716

모두의 알고리즘 문제 05. 최대공약수 구하기 연습문제

# 연습문제 5-1 n번째 피보나치 수를 구하는 알고리즘을 재귀호출을 이용해서 구현해 보시오. def fibo (n): if n==0: return 0 if n==1: return 1 return fibo(n-1) + fibo(n-2) print(fibo(7)) #결과 13 print(fibo(10)) #결과 55 #재귀호출 문제는 자신없어서 암담했는데 일단 배운대로 종료조건 설정하고 고민해보다가 #문제 힌트의 (7번값 = 5번값 + 6번값) 을 보고 대강 감을 잡고 풀었다. #이번 재귀호출은 그림으로 표현하자면 트리 구조처럼 된다. #fibo(5)를 호출하면 (4)와 (3)이 호출되고, (4)는 (3)과 (2)를 호출하고, (3)은 (2)와 (1)을 호출한다. #이렇게 하나의 함수가 두개의 함수를 호출..

모두의 알고리즘 문제 05. 최대공약수 구하기

def gcd(a,b): # Greatest Common Divisor, GCD, 최대공약수 i = min(a,b) # a, b 중 최솟값 i를 구한다. i가 최대공약수인지 검사한다. while True: # 반복문의 실행조건이 True라서 중간에 강제로 중지시키지 않는 한 계속 돌아간다. if a%i==0 and b%i==0: # i가 최대공약수라면 함수를 끝내버리는 것으로 반복문도 끝내버림. return i i = i-1 # i가 최대공약수가 아니면 1 줄이고 다시 돌린다. print(gcd(1, 5)) #결과 1 print(gcd(3, 6)) #결과 3 print(gcd(60, 24)) #결과 12 print(gcd(81,27)) #결과 27 print(gcd(232, 112)) #결과 8 def ..

모두의 알고리즘 문제 04. 팩토리얼 구하기 연습문제

# 연습문제 4-1. 1부터 n까지의 합 구하기를 재귀호출로 만들기. def re_sum_n (n): if n l[n-1]: # n=2일때 맨 처음값을 최댓값으로 두고 맨 끝값을 차례대로 비교. print("n = ", n, "max_n = ", max_n, "max_n이 다음위치의 원소보다 값이 더 커서 max_n은 그대로 유지") return max_n else: print("n = ", n, "max_n = ", max_n, "max_n의 다음자리가 값이 더 커서 다음자리 값을 반환") return l[n-1] #맨 처음값을 최댓값으로 가정하고 다음값과 비교한 후, 리스트의 길이를 1씩 늘임과 동시에 비교할 리스트 끝자리의 원소도 한자리씩 넘어가며 최댓값과 차례대로 비교. #최댓값, 비교하는 수: ..

모두의 알고리즘 문제 03. 동명이인 찾기 1 연습문제

3-1 n명 중 두 명을 뽑아 짝을 짓는다고 할 때 짝을 지을 수 있는 모든 조합을 출력하는 알고리즘을 만들어 보세요. #연습문제 3-1 def find_partner(n): t=len(n) result=set() for i in range(0, t-1): for j in range (i+1, t): print(n[i], "-", n[j]) listA=["Tom", "Jerry", "Mike", "Roll", "Kim", "Oirat", "Hudson"] find_partner(listA) 실행 결과: Tom - Jerry Tom - Mike Tom - Roll Tom - Kim Tom - Oirat Tom - Hudson Jerry - Mike Jerry - Roll Jerry - Kim Jerry -..

모두의 알고리즘 문제 03. 동명이인 찾기 1

def find_same_name (a): n=len(a) #리스트a의 길이 저장 result=set() #결과 저장할 빈 집합 생성 for i in range (0, n-1): #비교 기준을 선정하는 반복문 for j in range (i+1, n): #비교 대상을 선정하는 반복문, i+1이 아니라 1을 사용하면 첫 바퀴는 괜찮지만- if a[i]==a[j] : #다음바퀴에 비교 기준이 넘어가도 비교 대상은 첫바퀴와 동일하므로 원하는 결과가 나오지 않는다. result.add(a[i]) # 중복된 이름이 나오면 집합에 추가한다. return result name=["Tom", "Jerry", "Mike", "Tom"] print(find_same_name(name)) name2=["Tom", "Jerr..

모두의 알고리즘 문제 04. 팩토리얼 구하기

팩토리얼을 구하는 알고리즘 1 def fact(n): f=1 #결과 저장 변수f for i in range (1,n+1): #1부터 n+1 미만까지 f= f*i print(n, f) return f print(fact(1)) print("") print(fact(3)) print("") print(fact(10)) 각 단계마다 무슨 값을 가지는지 보기 쉽게 print함수를 몇개 추가했다. 결과는 아래와 같다. 1 1 1 3 1 3 2 3 6 6 10 1 10 2 10 6 10 24 10 120 10 720 10 5040 10 40320 10 362880 10 3628800 3628800 Process finished with exit code 0 입력n이 1일 때 1에 1을 곱하고 결과는 1. 입력n이 ..

모두의 알고리즘 문제 02. 최댓값 찾기

def find_max (a): n=len(a) # 입력받은 리스트의 길이를 변수n에 저장 max_v = a[0] #최대값 변수에 리스트에 첫번째 원소를 넣음 for i in range (1, n): # 0번째 원소는 최대값 변수에 넣었으니 1부터 n-1까지 비교를 반복한다. if a[i]>max_v: # 만약 최대값 변수의 원소보다 값이 큰 변수를 리스트에서 발견한다면 max_v=a[i] # 최대값 변수의 값은 리스트의 해당 원소로 변경한다 return max_v # 반복문이 끝나고 최대값 변수를 반환한다. v=[17, 92, 18, 33, 58, 7, 33, 42] print(find_max(v)) # 출력: 92 위는 리스트의 최댓값을 구하는 프로그램이다. 최댓값 구하기 프로그램의 시간복잡도를 생각..

모두의 알고리즘 - 리스트 공부

a=[5, 6, 7] # 리스트a에 자료 3개를 집어넣음. print(a) #리스트a의 자료 목록 # 출력: [5, 6, 7] print(a[0]) #리스트의 첫 번째 값은 0번째. 자료 위치를 0부터 샌다. 0번째에 5, 1번째에 6, 2번째에 7 # 출력: 5 print(a[2]) #리스트는 자료 위치를 0부터 세니까 2번째 자리의 자료가 마지막 자료다 # 출력: 7 print(a[-1]) #리스트의 끝에서 첫번째 값. 즉, 마지막 값. # 출력: 7 print(len(a)) #리스트 안에 들어있는 자료의 개수 출력. # 출력: 3 a.append(8) #자료 8을 리스트 맨 뒤에 추가 print(a) # 출력: [5, 6, 7, 8] a.insert(0, 4) #리스트 0번째 자리에 4를 추가 pr..

[웹소설 리뷰, 추천] 동방의 라스푸틴 - 러시아 황실의 동양인

오늘 리뷰할 소설은 동방의 라스푸틴이라는 작품이다. 21세기를 살아가는 한국인이 원인모를 이유로 러일전쟁 직후의 러시아 제국에 떨어지면서 이야기가 시작된다. 주인공은 먹고살기 위해 길거리에서 타로카드로 점을 치기도 하고 돌팔이 의사일을 하기도 한다. 여타 대체역사 소설과 다르게 길거리 점쟁이, 길거리 돌팔이 의사로 시작하는 게 꽤 새롭게 느껴졌고 이 생소한 스타트가 초반부를 흥미롭게 만들어 글을 쭉쭉 읽어가게 한다. 이후 황자의 병을 치료할 의사를 찾는 황실에 의해 황가로 끌려와 원래 역사의 라스푸틴이 그랬던것처럼 황자를 치료하려 하며 본격적으로 이야기가 궤도에 들어선다. 처참한 수준의 행정력, 이를 어떻게든 끌고가는 총리, 총리와 연대하여 부국강병을 이끌어내 황실을 존속시키려는 주인공, 득실거리는 똥별..

반응형