반응형

전체 글 713

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

시간 복잡도와 빅 오 표기법 공부 - O(n), O(1), O(n^2), O(log n)에 대하여

계산 복잡도와 시간 복잡도: 어떤 알고리즘이 문제를 풀기 위해 해야하는 계산이 얼마나 복잡한지를 나타낸 정도를 '계산 복잡도'라고 한다. 계산 복잡도는 '시간 복잡도'와 '공간 복잡도'로 나눌 수 있다. 빅 오 표기법: 계산 복잡도를 표현하는 방법에는 여러가지가 있는데, 그 중 '빅 오 표기법'을 주로 사용한다. 이 글에선 시간복잡도와 빅 오 표기법을 공부할 예정이다. 알고리즘이 빠르다, 느리다는 시간으로 표현하지 않는다. 다시말해, 초, 분, 시간으로 표현하지 않는다는 말이다. 왜나하면 같은 알고리즘이라도 하드웨어의 차이로 인해 수행시간이 달라지기 때문이다. 문서 작업용 노트북의 처리속도와 게이밍 컴퓨터의 처리속도가 같을 수는 없다. 따라서 알고리즘의 스피드는 곧 '알고리즘이 완료까지 걸리는 절차의 수..

모두의 알고리즘 - 문제 01. 1부터 n까지의 합 구하기 연습문제

def sum_mul(n): sum=0 for i in range(1, n+1): sum=sum+(i**2) # 거듭제곱은 ^ 기호가 아니라 ** 기호더라 return sum print(sum_mul(10)) def sum_mul2(n): return n*(n+1)*(2*n+1)//6 print(sum_mul2(10)) 1-1. 1부터 n까지 연속한 숫자의 제곱의 합을 구하는 프로그램을 for문으로 만들기 배운걸 응용하기만 하면 됐고 거듭제곱 기호가 C와는 다르게 ' ^ '가 아니라 ' ** '인 것을 알게 되었다. 1-2. 연습문제 1-1의 시간복잡도는 O(1)인가 O(n)인가? O(n). 입력값n과 계산 횟수(거듭제곱 한 번, 덧셈 한 번)가 정비례하여 증가하기 때문에 O(n)이다. 1-3. 1부터 ..

모두의 알고리즘 - 문제 01. 1부터 n까지의 합 구하기, 시간 복잡도 개념

def sum_n(n): s=0 for i in range (1, n+1): # 1 이상 n+1 미만 s=s+i return s print(sum_n(10)) print(sum_n(100)) def sum_n2(n): return n*(n+1)//2 # /는 소숫점 나오는 나눗셈, //은 정수 나눗셈 print(sum_n2(10)) print(sum_n2(100)) 첫 번째 방법은 흔히 프로그래밍을 처음 입문하는 사람들이 배우는 방법인데 이는 숫자가 1 늘어나면 계산 횟수가 1회 늘어나는 방식이다. 즉 1000을 입력하면 1000번 더해야한다. 0 + 1 + 2 + 3 + 4 + 5 -> 5를 입력하면 5번 더하게 된다. 두 번째 방법은 가우스가 만들었다 알려진 공식을 이용하는 방법이다. 이 공식을 이용..

반응형