반응형

전체 글 720

모두의 알고리즘 문제 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번 더하게 된다. 두 번째 방법은 가우스가 만들었다 알려진 공식을 이용하는 방법이다. 이 공식을 이용..

[웹소설 리뷰] 높은 하늘의 한국인 - 화려한 공중전이 매력있는 소설

오늘은 '높은 하늘의 한국인'이라는 웹소설을 리뷰하려 한다. 소설 초반부는 2차대전 시기에 미국이 진주만 폭격을 당하고 해군 병력이 박살났을 무렵에 주인공이 전투기 파일럿으로 모함에 오르는 내용으로 시작한다. 그 후 주인공이 부족한 여건에서 일본군과 공중전을 치르는 것으로 본격적으로 이야기가 시작된다. 소설의 메인은 당연히 전투기들의 공중전인데 이게 화려하고 실감나서 저절로 몰입이 되었다. 다만 전투씬을 읽을 때 불편한 점이 있다면 전투기들이 어떻게 움직이는지에 대한 설명이 불충분하여 직접 찾아봐야했다. 예를 들어 코브라 기동을 했다고 해서 그걸 찾아본다던가. 소설을 보다보니 어쩔 수 없이 각종 전투기 기동들을 찾아봤는데 글로 표현하려 해도 독자가 이해 못할 거 같아서 그냥 안한 거 같기도 하더라. 하지..

프로그램 공모전에서 고려해야할 것들 정리

전에 한전KDN 공모전 본선에 나갔을 때 내 팀이나 다른 팀들이 평가받는 것을 보면서 공모전에서 고려해야할 점을 몇가지 알게 됐는데 여기에 한번 정리해본다. 1. 개발할 것은 철저한 검증을 거친 후에 선정하라. 어느 팀은 서버실에 화재가 난다면 즉시 알 수 있는 작품을 들고 갔는데 반응이 좋지 않았다. 심사위원님은 "이건 필요 없다.", "서버실에 한번이라도 견학을 해봤다면 이걸 만들었을 리가 없다." 등의 혹평을 내뱉었다. 이미 있는 것, 필요 없는 것은 만들어 가도 좋은 소리는 듣지 못하고 특히 본인이 선정한 주제에 대해 상술한 상황처럼 제대로 조사하지 않은 게 확연히 드러나면 혹평을 받게 된다. 우리 팀도 프로그램을 기껏 만들어 갔는데 이미 사용중인 프로그램이라는 소리를 들었다. 분명 사전에 검색을..

웹소설 리뷰할 때 소설 내용 언급을 너무 꺼려선 안되는 것 같다

웹소설 리뷰할 때 느낀 건데 너무 스포를 안하려고 내용을 집어넣지 않으면 리뷰가 너무 단조로워지더라. "이 점은 재밌고 이 점이 특히 좋았는데 이건 좀 아쉬웠다." 이런 식으로 진행이 되어야하는데 생각해보면 전에 쓴 리뷰 몇 편들은 스포를 경계해 내용 언급을 많이 줄여서 리뷰가 단조로워진 감이 있는 것 같다. 앞으로는 좀 주의해야겠다.

일상/잡담 2022.05.03
반응형