작성
·
31
·
수정됨
0
1-5 알고리즘과 친해지기(2)
# def find_max_occurred_alphabet(string):
# alphabet = [0] * 26
# for i in string:
# if i.isalpha():
# alphabet[ord(i) - ord('a')] += 1
#
# max = alphabet[0]
# index = 0
# for i in range(len(alphabet)):
# if alphabet[i] > max:
# max = alphabet[i]
# index = i
#
# return chr(index+ord('a'))
from collections import Counter
def find_max_occurred_alphabet(string):
string = [char for char in string if char.isalpha()]
counter = Counter(string)
print(counter)
return max(counter, key=counter.get)
result = find_max_occurred_alphabet
print("정답 = i 현재 풀이 값 =", result("hello my name is dingcodingco"))
print("정답 = e 현재 풀이 값 =", result("we love algorithm"))
print("정답 = b 현재 풀이 값 =", result("best of best youtube"))
안녕하세요. 첨부한 코드 중 주석 처리한 부분은 문제를 보고 사전에 제가 작성한 코드입니다. 결과는 예상과 동일하게 출력됩니다.
그 밑에는 다른 풀이 방법을 찾다가 Counter 클래스를 사용하여 작성한 코드입니다. 본 강의에서는 카운터가 동일한 경우, 기존의 값을 변경하지 않는 방식이라 i가 출력되지만, 해당 방법을 사용하면 입력 순으로 o가 출력됩니다.
이 경우 최빈값을 찾아내는 코드는 맞지만, 값이 동일한 경우에 처리하는 로직이 다르기 때문에 발생한다고 이해하면 될까요?
답변해주신다면 감사하겠습니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. dkw gh님.
질문해주신 내용은 최빈값을 찾을 때 동일 값 처리의 차이에 대한 것입니다.
주석 처리된 코드와 Counter
클래스를 활용한 코드는 둘 다 문자열에서 가장 많이 발생하는 문자를 찾는 기능을 수행합니다.
직접 구현 방식 (주석 처리 코드):
Counter
클래스 이용:
Counter
객체를 사용해 자동으로 각 문자 빈도를 계산합니다.max(counter, key=counter.get)
를 이용하여 가장 빈도가 높은 문자를 반환합니다.Counter
는 입력 순서대로 저장하기 때문에 입력 순서상 먼저 등장한 문자가 반환됩니다.이 차이가 발생하는 이유는 Counter
클래스가 동등한 빈도를 가진 문자들 중 처음 등장한 것을 반환하도록 설계되었기 때문입니다. 따라서, 코드를 작성할 때 어떤 상황에서 어느 방식이 더 적합할지를 염두에 두시면 좋습니다.
관련 내용에 대한 기존 질문과 답변은 아래 링크에서 더 찾아보실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.