📌2/23 영상강의 6_031 ~ 6_034 + 6_044
🖥️숫자로 이루어진 리스트에서 입력한 숫자를 검색하는 모듈을 다음 요건에 따라 만들어보자
#모듈
def searchNumberAlgirithm(ns, sn):
searchResultIdx = -1
print(f'Numbers : {ns}')
print(f'Search Number : {sn}')
n = 0
while True:
if n ==len(ns):
print('Search Fale!')
break
if ns[n] == sn:
searchResultIdx = n
print('Search SUCCESS!')
print(f'Search result INDEX : {searchResultIdx}')
break
n += 1
return searchResultIdx
#실행부
import random as rd
import lineMod as lm
if __name__== '__main__':
rNums = rd.sample(range(1,21),10)
searchNum = int(input('찾으려는 숫자 입력:'))
resultIdx = lm.searchNumberAlgirithm(rNums,searchNum)
if resultIdx == -1:
print('No results found')
print(f'search result index : {resultIdx}')
else:
print('>>> Search Result <<<')
print(f'search result index : {resultIdx}')
print(f'search result number : {rNums[resultIdx]}')
- while문을 사용하여 찾는 값이 있을때와 리스트의 끝까지 갔는데 없을때로 반복문을 빠져나오게 설정한다. 찾는 값이 없을때 -1을 출력하기 위해 searchResultIdx 의 처음 값을 -1로 정한다.
🖥️숫자로 이루어진 리스트에서 입력한 숫자를 검색하는 모듈을 다음 요건에 따라 만들어보자
#모듈
def binaryALgorithm(ns,sn):
secrchIdx = -1
staIdx = 0
endIdx = len(ns)-1
midIdx = len(ns) // 2
midVal = ns[midIdx]
print(f'staIdx : {staIdx}, endIdx :{endIdx}')
print(f'midIdx : {midIdx}, midVal :{midVal}')
n=0
while sn >= ns[0] and sn <= ns[len(ns)-1]:
if sn == ns[len(ns)-1]:
secrchIdx = len(ns) - 1
break
if staIdx + 1 == endIdx:
if ns[staIdx] != sn and ns[endIdx] != sn:
break
if sn < midVal:
endIdx = midIdx
midIdx = (staIdx+endIdx) // 2
midVal = ns[midIdx]
print(f'-staIdx : {staIdx}, endIdx :{endIdx}')
print(f'-midIdx : {midIdx}, midVal :{midVal}')
elif sn > midVal:
staIdx = midIdx
midIdx = (staIdx + endIdx) // 2
midVal = ns[midIdx]
print(f'+staIdx : {staIdx}, endIdx :{endIdx}')
print(f'+midIdx : {midIdx}, midVal :{midVal}')
elif sn == midVal:
secrchIdx = midIdx
break
return secrchIdx
#실행부
import binaryMod as bm
if __name__ == '__main__':
nums = [1, 2, 4, 6, 7, 8, 10, 11, 13, 15, 16, 17, 20, 21, 23, 24 ,27, 28]
searchData = int(input('input search number : '))
resultIdx = bm.binaryALgorithm(nums,searchData)
print(nums)
if resultIdx == -1:
print('No results found')
print(f'search result index:{resultIdx}')
else:
print('>>> Search Results <<<')
print(f'search result index:{resultIdx}')
print(f'search result number:{nums[resultIdx]}')
- 내가 찾는 숫자가 midVal이 되면 성공!
- 기존 리스트의 끝 값이 내가 찾는 숫자와 같을 경우도 넣어준다 (연산이 빨리끝나서 좋은건가봄)
- 찾는 숫자가 리스트에 없을때 무한반복에 빠지지 않게 하는 조건도 있어야한다.
🖥️알파벳 문자들과 정수들에 대한 순위를 알고리즘을 이용해 만들어보자 알파벳은 아스키코드 값을 이용한다.
#모듈
def rankAlgorithm(ns):
ranks = [0 for i in range(len(ns))]
for idx, n1 in enumerate(ns):
for n2 in ns:
if n1 < n2:
ranks[idx] += 1
print(f'datas : {ns}')
print(f'ascIIDatas : {ranks}')
for i ,n in enumerate(ns): #보기좋게 랭크1부터 표시되도록 +1해줌
print(f'data:{n} \trank: {ranks[i]+1}')
result = [0 for i in range(len(ranks))]
for idx , rank in enumerate(ranks):
result[rank] = ns[idx]
return result
#실행부
import rankMod as rm
datas = [32, 'a', 'z', 45, 'G', 39, 50, 'T', 't', 22, 31, 55, 's', 63, 59, 'E']
ascIIDates = []
for data in datas:
if type(data) == str:
data = ord(data)
ascIIDates.append(data)
else:
ascIIDates.append(data)
sotedRank = rm.rankAlgorithm(ascIIDates)
print(sotedRank)
🖥️전체 학생의 시험 점수에 대한 평균과 최솟값을 구하고 , 평균과 최솟값의 편차를 구하는 프로그램을 최솟값 알고리즘을 이용해서 만들어보자
#모듈
def getAvg(ns):
total = 0
for n in ns:
total += n
return total / len(ns)
def getMin(ns):
minN = ns[0]
for n in ns:
if minN > n:
minN = n
return minN
def getdeviation(n1,n2):
return round(abs(n1-n2),2)
def getMaxorMin(ns,maxFlag=True):
resultN = ns[0]
for n in ns:
if maxFlag:
if resultN < n:
resultN = n
else:
if resultN > n:
resultN = n
return resultN
#실행부
import mod
scores = [100, 64, 94, 66, 75, 58, 99, 76, 96, 74,
54, 73, 88, 70, 68, 50, 95, 89, 69 ,98]
scores_avg = mod.getAvg(scores)
maxOrMin = mod.getMaxorMin(scores,maxFlag=True)
deviation = mod.getdeviation(scores_avg,maxOrMin)
print(f'scores_avg :{scores_avg}')
print(f'maxOrMin :{maxOrMin}')
print(f'deviation :{deviation}')
- 최댓값, 최솟값 한번에 구하는 함수 만들기 -> maxflag=True를 인수로 함수에 던진다. 함수에서는 변수로 T/F를 구분해서 받고 T/F일때와 아닐때의 조건식을 나누어 전개한다 (이전 asc=True 사용법과 동일)
마무리
알고리즘 문제풀이 순서가 pdf 강의자료와 맞질 않아서 약간 혼란하다
오늘 모각코에서 이해가 안됐던 부분을 얘기했는데 다들 함께 고민해주고 설명해주셔서 넘 감사했다. 읭 스러운 질문일까봐 물어봐도 괜찮을지 조금 망설였었는데 비전공자의 머릿속에 하나라도 더 넣어주시려고 힘써주시는 모습이 정말.. 갬동..흑흑 고마워요 나의 동료덜
그리고 아직 코딩테스트를 풀다 말다 하고있는데 공부만 쭉 할때보다 집중력이 떨어진다. 테스트는 주말에 바짝 하는걸루! EDA도 해야하는데 !