해결된 질문
작성
·
109
·
수정됨
0
몇 챕터/몇 강을 수강 중이신가요?
=> 1-5. 알고리즘과 친해지기 (2)
어떤 알고리즘을 학습하고 계신가요?
=> 최빈값 구하기
어떤 개념이 헷갈리시나요?
=> 안녕하세요~ 화면 캡쳐가 안돼서 말로 설명하자면, 강의 마지막 시뮬레이션 영상(25:58)에서 max_alphabet_index가 8이었다가, 13이었다가, 마지막에 14인 채로 끝나는 이유가 뭔가요?
코드 상으로, if문 조건절에 등호를 붙이지 않았기 때문에(`if alphabet_occurrence > max_occurance:`), 동일한 최빈값 중에서는 알파벳 순서가 가장 앞에 위치한 알파벳이 max로 저장된다는 것은 이해했습니다!
그냥 시뮬레이션 영상 자체에 대한 질문이었어요! 근데 쓰다 보니 쓸 데 없는 질문인 것 같긴 하네요😅 그냥 코드 상으로 이해했다면 넘어가도 괜찮겠죠!??
감사합니다!!
답변 2
1
안녕하세요 지혜님!!! 좋은 질문 감사합니다!!
시뮬레이션 영상에 대해 질문 주셔도 괜찮습니다!!
아마 아래 코드의 2번째 for 문에 대한 동작 방식인 것 같습니다!
def find_max_occurred_alphabet(string):
alphabet_occurrence_array = [0] * 26
for char in string:
if not char.isalpha(): # 얘가 알파벳인지 검사하고
continue
arr_index = ord(char) - ord('a') # 해당 문자를 인덱스로 치환합니다. a -> 0 , b-> 1
alphabet_occurrence_array[arr_index] += 1 # 빈도수 배열에 인덱스로 찾아가서 해당 값을 추가해줍니다.
max_occurrence = 0
max_alphabet_index = 0
for index in range(len(alphabet_occurrence_array)): # 0,1...25
alphabet_occurrence = alphabet_occurrence_array[index]
if alphabet_occurrence > max_occurrence:
max_occurrence = alphabet_occurrence
max_alphabet_index = index
return chr(max_alphabet_index + ord('a'))
해당 코드의 2번째 포문에서는 index 를 0부터 25까지 올리면서 max_occurrence 를 탐색하고 있습니다. 그래서 기존 코드의 동작방식은 max_occurrence 가 3인 첫번쨰 인덱스인 8에서 바뀌지 않아야 하는데....
시뮬레이션에서는 바뀌고 있습니다!!
맞습니다. 시뮬레이션 영상이 잘못된 것 같습니다!
아마 시뮬레이션 코드 내에서는 다음과 같이 alphabet_occurrence 와 max_occurrence 가 같더라도 변경되는 구조로 작성되어 있어서 ocurrence 값이 3인 것들을 다 넣어주고 있었던 것 같습니다
for index in range(len(alphabet_occurrence_array)): # 0,1...25
alphabet_occurrence = alphabet_occurrence_array[index]
if alphabet_occurrence >= max_occurrence:
max_occurrence = alphabet_occurrence
max_alphabet_index = index
매의 눈으로 시뮬레이션의 다른 알고리즘까지 파악해주시다니!! 감사합니다 ㅎㅎ
코드를 완벽하게 이해해주셔서, 질문해주셔서 감사합니다!! 영상은 조만간 변경해두도록 하겠습니다
감사합니다!!
0
안녕하세요, 인프런 AI 인턴입니다. 김지혜님.
질문해주신 부분은 최빈값을 구하는 과정에서 동일한 빈도를 가진 문자가 여러 개 있을 때, 어떤 문자가 선택되는지에 대한 의문인 것 같습니다.
최빈값 찾기 알고리즘:
max_occurrence
와 max_alphabet_index
는 발견된 최대 빈도 값과 그 인덱스를 저장합니다.등호 처리 방법:
if alphabet_occurrence > max_occurrence:
라는 조건을 사용하기 때문에, 동일한 빈도가 있는 경우 기존의 max_alphabet_index
는 변경되지 않습니다.시뮬레이션에서의 혼란:
max_alphabet_index
가 여러 번 바뀌다가 마지막에 ‘o’(14)가 아닌 ‘i’(8)로 끝난 이유는 max_occurrence
가 갱신되지 않아서입니다.강의 내용에서 코드의 설명은 정확하며, 동일 빈도의 문자를 처리하는 방식에 익숙해지면 좋습니다. 쓰신 것처럼 코드에서 이해하신 대로 넘어가시면 됩니다.
관련된 기존 질문 및 답변을 더 참고하고 싶으시면 다음 링크를 참조하세요:
저는 질문자님의 이해를 돕고자 다양한 질문과 답변을 검토하여 가장 관련성이 높은 정보를 제공하고 있습니다. 베타 기능으로 답변이 부정확할 수 있는 점 양해 부탁드리며, 추가로 궁금한 점이 있으시다면 언제든지 질문해 주세요. 곧 지식공유자께서 정확한 답변을 제공해 주실 것입니다.
감사합니다 쌤~!!!