Python - Algorithm 코드 전개순서 최댓값 찾기, 알파벳 빈도수 찾기
2022. 11. 22. 14:22ㆍPython/Algorithm
728x90
- 함수 호출시 코드의 흐름
- 함수 호출시 어떻게 코드가 전개되는건지 헷갈리시지는 않나요? 다시 한번 코드의 흐름을 복기해볼게요!
- 함수 calculateAvg를 호출하면서 변수 priceA와 priceB를 매개변수로 전달
- 함수 calculateAvg의 바디 코드가 실행됨. 이 때 1번에서 전달한 매개변수의 값이 함수를 선언할 때 썼던 매개변수명인 price1, price2에 할당되었다고 보면 됨
- 함수의 바디 코드가 최종적으로 변수 avg를 리턴하고 있고, 이것이 변수 avg1에 할당됨
- 함수 호출시 어떻게 코드가 전개되는건지 헷갈리시지는 않나요? 다시 한번 코드의 흐름을 복기해볼게요!
function calculateAvg(price1, price2, price3) {
const avg = (price1 + price2 + price3) / 3
return avg
}
const priceA = 1000
const priceB = 2000
const priceC = 3000
const avg = calculateAvg(priceA, priceB, priceC)
console.log(`평균가격: ${avg}`)
최댓값 찾기
1번째방법
# 이 함수는 find_max_num이 다른 숫자들과 비교하는 방식으로 풀어짐
# 3부터 시작해서 5,6,1,2,4와 비교하고
# 3과 5를 비교, 3이 작음 바로 False, 5로 넘어감 5와 3을 비교 5가 더 큼, 5와 6 비교 Fasle, 6부터 시작
# 6과 3을 비교, 5과 비교, 6과 1 6과 2 6과 4를 비교했을때 6이 제일 컸었음 = 이 배열의 최댓값임
# 마지막 num으로써 반환됨.
input = [3, 5, 6, 1, 2, 4]
def find_max_num(array):
for num in array:
for compare_num in array:
if num < compare_num:
break
else:
return num
result = find_max_num(input)
print(result)
작동순서는 아래와 같다. (return 1 까먹고 안지움)
2번째방법
모든 값을 비교하며 지나가고 최댓값일 경우 max_num은 받아왔던 num값이 되며
배열의 끝까지 비교해나며 다 돌았을경우 최대값을 max_num에 담아 최종 값을 리턴함
#find_max_num 이라는 함수를 구현할 방법은 지정 변수로 구현함
#max_num이라는 변수를 설정후 가장 큰 녀석을 기록하도록 함
# 3, 5 비교시 5가 더 크니 max_num에 담기고,
# 5, 6 비교시 6이 더 크니 다시 max_num에 담기고
# 1, 6 .. 중략
# 2, 6
# 4, 6 비교시 6이 더크니 현상 유지 하는데 배열의 갯수만큼 다 돌았으니
# max_num을 return값에 넣어 반환해줌.
input = [3, 5, 6, 1, 2, 4]
def find_max_num(array):
max_num = array[0]
for num in array:
if num > max_num:
max_num = num
return max_num
result = find_max_num(input)
print(result)
제일 많이나온 알파벳 찾기
1번째 방법
이놈은 더 사악하다[?]
# for문을 이용하여 알파벳을 하나하나 꺼내서 문자열에 있는 문자와 동일하다면 occurrence를 하나씩 증가시켜
# max_occurence를 증가하는 방식의 코드
#이는 알파벳마다 문자열을 돌며 몇 글자 나오는지 확인하는 방법
#a -> 3
#b -> 0 ....
#alaphabet_array에 다 적어넣은 이유? -> a랑 이 문자열이랑 비교해줘야되기때문에.
#이 alphabet_array에서 하나하나 꺼내어 input과 비교를 할것임.
#나온 문자가 있다면 하나씩 빈도수를 업데이트를 가장 최고가 나오는 값을 반환하는 방식으로.
#최고로 많이 나온 변수의 빈도를 저장하는 함수 max_occuurence, 최고로 많이 나온 알파벳을 저장하기위한 변수 두가지가 필요함 max_alphabet
#0번째 있는 원소를 넣고 for문을 돌며 몇번이나 나온지 확인함
#alphabet_array에서 alphabet이라는 변수에 하나하나 원소를 담아주고
# occurence라는 변수를 0으로 지정후 for문을 돌며 만약 이떄 char가 alphabet과 동일하다면
# occurence는 하나씩 증가된다.
# 만약 occurence가 max_occurence보다 크다면 max_occurence에 occurence를 넣고
# max_alphabet에 alphabet을 넣어준다.
#
input = "hello my name is sparta"
def find_max_occurred_alphabet(string):
for char in string:
alphabet_array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
"n", "o", "p", "q", "r", "s", "t", "u", "q", "r", "w", "x", "y", "z"]
max_occurrence = 0
max_alphabet = alphabet_array[0]
for alphbet in alphabet_array:
occurrence = 0
for char in string:
if char == alphbet:
occurrence +=1
if occurrence > max_occurrence:
max_occurrence = occurrence
max_alphabet = alphbet
# 이 부분을 채워보세요!
return max_alphabet
result = find_max_occurred_alphabet(input)
print(result)
2번째 방법
머리가 나쁜지 이해하는데 한참 걸렸다.
#먼저 배열을 0을 넣은 알파벳의 갯수(26개)만큼 초기화 하여 선언함
#for문을 작성하는데,char라는 변수(0)에 string의 갯수만큼 돌겠다는 얘기이다.
# 이는 문자열이 하나하나씩 담기게 해주는 for문임.
#만약 입력된 문장값이 알파벳이 아니라면 for문의 다음 인덱스로 넘어가 계속 돌며
#이때 문장값이 알파벳이라면 입력된 알파벳의 아스키코드값에서 a의 아스키코드값(97)을 빼서
#(예:s의 아스키코드값(115)에서 a의 아스키코드값(97)을 뺌, 답인 18번째 배열에 +1을 추가해준다.)
#이렇게 총 배열의 인덱스만큼을 돌고나면 배열에서 가장 높은 숫자(현재 문장에서는 a가 3으로 제일 높다)
#를 다시 배열의 인덱스의 범위만큼 돌며 숫자들을 비교해나간다.
#0~25번째 인덱스를 다 돌았을때 마지막 남은 가장 높은 인덱스의 번호
# (여기서는 a이니 max_alphabet_index는 0이고, 이때 a의 아스키값을 더하여 가장 많이 나온 알파벳의 아스키코드를 구한다.)
#그런 후에 나온 아스키코드(여기서는97)을 반환하는데, 이때 97은 a 이므로
#chr(max_alphabet_index + ord("a"))에서 97과 0을 더하여 반환하게 되는데
#chr(97)이 되므로 문자열 'a'를 반환한다.
#마지막으로 이 값은 return값에 담기게되며 이 값은 result에 'a' 라는 값으로 print에 의해 출력된다
input = "hello my name is sparta"
def find_max_occurred_alphabet(string):
alphabet_occurrence_array = [0] * 26
for char in string: # 문자열이 하나하나씩 담기게 해주는 for 문
if not char.isalpha():
continue
arr_index = ord(char) - ord("a")
alphabet_occurrence_array[arr_index] += 1
max_occurrence = 0
max_alphabet_index = 0
for index in range(len(alphabet_occurrence_array)):
alphabet_occurrence = alphabet_occurrence_array[index]
if alphabet_occurrence > max_occurrence:
max_occurrence = alphabet_occurrence
return chr(max_alphabet_index + ord("a"))
result = find_max_occurred_alphabet(input)
print(result)
'Python > Algorithm' 카테고리의 다른 글
프로그래머스 OX 퀴즈 (0) | 2022.12.19 |
---|---|
문자열 뒤집기 (0) | 2022.12.18 |
배열 n개로 쪼개기 (0) | 2022.12.18 |
프로그래머스 LV.0 로그인 성공? (0) | 2022.11.29 |
이진검색, 선형검색 알고리즘(Binary Search,Linear Search) (0) | 2022.11.22 |