스파르타코딩 - 알고리즘 강의 1 주차
강의
내용
- 최대값 찾기 이해
def find_max_num(array): max_num = array[0] # 비교할 대상 ( pivot ) for i in array: if i > max_num: # 더 큰값을 Max_num 으로 넘김 max_num = i return max_num print("solutaion = 6 / result = ", find_max_num([3, 5, 6, 1, 2, 4])) print("solutaion = 6 / result = ", find_max_num([6, 6, 6])) print("solutaion = 1888 / result = ", find_max_num([6, 9, 2, 7, 1888]))
- 최빈값 찾기 이해
def find_alphabet_occurrence_array(string): alphabet_occurrence_array = [0] * 26 # 알파벳 개수인 26을 배열로 생성 for char in string: if not char.isalpha(): # 알파벳이 아니면 계속 진행해라 continue arr_index = ord(char) - ord('a') # ASCII 코드 사용 글자를 숫자로 바꿔줌 # 그 숫자를 인덱스로 넣어주고, 나타날때마다 + 1 해준다 ( 최고 빈도 만듬 ) alphabet_occurrence_array[arr_index] += 1 max_occurrence = 0 # 최빈값을 담을 그릇 max_index = 0 # 최빈값의 인덱스를 담을 그릇 for index in range(len(alphabet_occurrence_array)): alphabet_occurrence = alphabet_occurrence_array[index] if max_occurrence < alphabet_occurrence: # 더 큰 값을 max_occurrence 로 넘김 max_occurrence = alphabet_occurrence max_index = index # 그 값의 인덱스가 최대값의 인덱스임 return chr(max_index + ord('a')) # 그 최대값을 글자로 변환해주자. result = find_alphabet_occurrence_array print("정답 = a 현재 풀이 값 =", result("Hello my name is sparta")) print("정답 = a 현재 풀이 값 =", result("Sparta coding club")) print("정답 = s 현재 풀이 값 =", result("best of best sparta"))
- 곱하기 또는 더하기 이해
def find_max_plus_or_multiply(array): num = 0 # 결과값 for i in array: if i <= 1 or num <= 1: # array 의 값 or 결과값의 초기값 이 0, 1 일때 num += i # 더하고 else: num *= i # 나머진 곱한다. return num result = find_max_plus_or_multiply print("정답 = 728 현재 풀이 값 =", result([0,3,5,6,1,2,4])) print("정답 = 8820 현재 풀이 값 =", result([3,2,1,5,9,7,4])) print("정답 = 270 현재 풀이 값 =", result([1,1,1,3,3,2,5]))
- 최저 빈도 수의 알파벳
def find_not_repeating_first_character(string): alphabet_occurrence_array = [0] * 26 for char in string: if not char.isalpha(): continue arr_index = ord(char) - ord('a') alphabet_occurrence_array[arr_index] += 1 not_repeat = [] # 최저 빈도를 담을 그릇 for index in range(len(alphabet_occurrence_array)): if alphabet_occurrence_array[index] == 1: # 1이면 not_repeat.append(chr(index + ord('a'))) # 알파벳으로 담는다 # 여기까지의 결과는 [c, d] 라고 나온다 순서를 위해 여기서 한번 더 for 문 해야한다. for char in string: if char in not_repeat: # not_repeat에 char 가 있으면, return char return '_' result = find_not_repeating_first_character print("정답 = d 현재 풀이 값 =", result("abadabac")) print("정답 = c 현재 풀이 값 =", result("aabbcddd")) print("정답 =_ 현재 풀이 값 =", result("aaaaaaaa"))
- HW. 소수 나열하기
input = 20 def find_prime_list_under_number(number): prime_num = [] # 결과값 그릇 for n in range(2, number + 1): # 소수 1 을 제외하고, 입력값 보다 1 큰 수 까지 # for i in range(2, n): -> 기존: 2 부터 n 까지 for i in prime_num: # 모든 소수 로 나누어 떨어지지 않는지 알아보도록 개선 (2, 3) if n % i == 0 and i * i <= n : break else: prime_num.append(n) return prime_num result = find_prime_list_under_number(input) print(result)
- HW. 문자열 뒤집기
input = "011110" def find_count_to_turn_out_to_all_zero_or_all_one(string): turn_zero = 0 turn_one = 0 if string[0] == '0': turn_zero += 1 elif string[0] == '1': turn_one += 1 for i in range(len(string) -1): if string[i] != string[i + 1]: if string[i + 1] == '0': turn_zero += 1 if string[i + 1] == '1': turn_one += 1 return min(turn_zero,turn_one) result = find_count_to_turn_out_to_all_zero_or_all_one(input) print(result)
궁금증 ?
- 최대값 찾기 이해 ( ft. for - else )
Q ) 왜 else 의 위치가 저렇게 되는지?def find_max_num(array): for i in array: for ii in array: if i < ii : break else: return i print("solutaion = 6 / result = ", find_max_num([3, 5, 6, 1, 2, 4])) print("solutaion = 6 / result = ", find_max_num([6, 6, 6])) print("solutaion = 1888 / result = ", find_max_num([6, 9, 2, 7, 1888]))
- for - else 문을 이해하자 파이썬에는 for문에 특이한 else기능이 하나 더 있습니다. 이것은 일종의 syntax sugar같은 것인데, 이런 문법들을 사용하면, 간결해지면서 가독성이 좋아지죠,, (단 문법을 알고 있다는 전제로 입니다. ) 이 방법의 사용예는 for문을 사용하다보면, 루프 중간에 break 문으로 빠져나오는 경우들이 있는데, 이게 break문이 걸려서 빠져나가는지 아닌지를 판단이 필요한 경우가 있습니다. 보통은 flag등을 둬서, 처리하는게 기존의 방식이라면, for문과 같은 레벨에 else를 둬서 break없이 빠져나온 경우를 처리하는 방법입니다.
위 예제의 경우는 x =2 에서 루프를 빠져나오기때문에, else문이 실행이 되지 않고 'loop out' 이 출력이 되고,for x in range(4): if x == 2: print ('loop out') break else: print ('loop end')
위와 같은 경우는 , for loop가 break없이 빠져나왔으므로 'loop end' 가 출력이 된다. ref. http://pyengine.blogspot.com/2019/12/for-else.htmlfor x in range(4): # nop pass else: print ('loop end')
- for - else 문을 이해하자 파이썬에는 for문에 특이한 else기능이 하나 더 있습니다. 이것은 일종의 syntax sugar같은 것인데, 이런 문법들을 사용하면, 간결해지면서 가독성이 좋아지죠,, (단 문법을 알고 있다는 전제로 입니다. ) 이 방법의 사용예는 for문을 사용하다보면, 루프 중간에 break 문으로 빠져나오는 경우들이 있는데, 이게 break문이 걸려서 빠져나가는지 아닌지를 판단이 필요한 경우가 있습니다. 보통은 flag등을 둬서, 처리하는게 기존의 방식이라면, for문과 같은 레벨에 else를 둬서 break없이 빠져나온 경우를 처리하는 방법입니다.
Author And Source
이 문제에 관하여(스파르타코딩 - 알고리즘 강의 1 주차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@coil/스파르타코딩-알고리즘-강의-1-주차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)