강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

김지혜님의 프로필 이미지
김지혜

작성한 질문수

38군데 합격 비법, 2025 코딩테스트 필수 알고리즘

1-5. 알고리즘과 친해지기 (2)

1-5. 알고리즘과 친해지기 (2) 맨 마지막 시뮬레이션 관련 문의

해결된 질문

작성

·

109

·

수정됨

0

1. 현재 학습 진도

  • 몇 챕터/몇 강을 수강 중이신가요?
    => 1-5. 알고리즘과 친해지기 (2)

  • 어떤 알고리즘을 학습하고 계신가요?
    => 최빈값 구하기

     

 

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 인턴입니다. 김지혜님.

질문해주신 부분은 최빈값을 구하는 과정에서 동일한 빈도를 가진 문자가 여러 개 있을 때, 어떤 문자가 선택되는지에 대한 의문인 것 같습니다.

코드 동작 이해

  1. 최빈값 찾기 알고리즘:

    • 코드는 알파벳 배열을 순회하면서 각 알파벳의 빈도를 계산합니다.
    • max_occurrencemax_alphabet_index는 발견된 최대 빈도 값과 그 인덱스를 저장합니다.
  2. 등호 처리 방법:

    • if alphabet_occurrence > max_occurrence:라는 조건을 사용하기 때문에, 동일한 빈도가 있는 경우 기존의 max_alphabet_index는 변경되지 않습니다.
    • 이로 인해 같은 빈도를 가지는 문자가 여러 개 있을 때, 배열에서 더 앞선 인덱스의 문자(알파벳 순서가 빠른)가 최종 결과로 반환됩니다.
  3. 시뮬레이션에서의 혼란:

    • 강의 시뮬레이션에서는 변수 max_alphabet_index가 여러 번 바뀌다가 마지막에 ‘o’(14)가 아닌 ‘i’(8)로 끝난 이유는 max_occurrence가 갱신되지 않아서입니다.
    • 동일 빈도를 가진 ‘o’와 ‘i’ 중 코드에서 먼저 발견된 ‘i’가 반환됩니다.

강의 내용에서 코드의 설명은 정확하며, 동일 빈도의 문자를 처리하는 방식에 익숙해지면 좋습니다. 쓰신 것처럼 코드에서 이해하신 대로 넘어가시면 됩니다.

관련된 기존 질문 및 답변을 더 참고하고 싶으시면 다음 링크를 참조하세요:

저는 질문자님의 이해를 돕고자 다양한 질문과 답변을 검토하여 가장 관련성이 높은 정보를 제공하고 있습니다. 베타 기능으로 답변이 부정확할 수 있는 점 양해 부탁드리며, 추가로 궁금한 점이 있으시다면 언제든지 질문해 주세요. 곧 지식공유자께서 정확한 답변을 제공해 주실 것입니다.

김지혜님의 프로필 이미지
김지혜

작성한 질문수

질문하기