강의

멘토링

로드맵

Inflearn brand logo image

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

윤구님의 프로필 이미지
윤구

작성한 질문수

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

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

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

작성

·

10

·

수정됨

0

1. 현재 학습 진도

  • 몇 챕터/몇 강을 수강 중이신가요?

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

  • 어떤 알고리즘을 학습하고 계신가요?

  • 최빈값 찾기

  • 여기까지 이해하신 내용은 무엇인가요?

     




def find_max_occurred_alphabet(string):
    alphabet = {}
    result = []
    maxvalue = 0

    for char in string:
        if char.isalpha():
            alphabet[char] = alphabet.get(char,0) + 1

    for value in alphabet:
        maxvalue = max(maxvalue, alphabet[value])

    for i in alphabet:
        if alphabet[i] == maxvalue:
            result.append(i)
    return result


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"))



영상 안보고 문제만 보고 한번 풀어봤는데

예시의 hello my name is dingcodingco,
we love algorithm, best of best youtube 문자열 전부 최빈값이 여러개라서
원본 문제로 가보니 여러개라면 -1을 반환하도록 되어있어서 조금 바꿔서
저는 리스트로 반환하도록 풀어봤는데
이 방법은 어떨까요?

알파벳 아스키코드로 풀 방법은 생각이 안나서 자바에서는 map에 넣듯이 dictionary에 넣어서 풀어보려고 했습니다

max 메소드는 연습할땐 안쓰는게 좋은데 자바 삼항연산자가 파이썬에서 어떻게 쓰는지 몰라서 일단 max로 해봤습니다

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 윤구님.

질문해주신 내용은 문자열에서 가장 빈도가 높은 알파벳을 찾는 과정으로, 여러 개의 최빈값이 존재할 때 리스트로 반환하는 방식으로 해결하셨습니다. 이 접근 방식은 매우 합리적이며, 문제의 요구 사항에 맞추어 잘 풀어내신 것 같습니다.

코드 설명

  1. 알파벳 빈도 계산:

    • 주어진 문자열을 순회하며 각 알파벳의 빈도를 dictionary를 사용하여 계산합니다.
    • Python의 dictionary는 자바의 map과 비슷하게 키-값 쌍을 저장하는 자료구조로 알파벳 빈도를 간편하게 셀 수 있습니다.
  2. 최대 빈도 찾기:

    • dictionary의 값을 순회하여 가장 높은 빈도를 찾습니다.
  3. 최빈값 확인 및 결과 반환:

    • 최빈값과 같은 값을 가진 알파벳들을 리스트에 추가하고 반환합니다.

개선점 및 조언

  • 현재 코드에서는 대소문자를 구분하고 있어, ‘A’와 ‘a’를 다른 문자로 인식합니다. 문제 요구사항에 따라 대소문자를 구분하지 않고 처리하려면, char.lower()를 사용하여 모든 문자를 소문자로 통일한 후 처리하는 방법도 있습니다.

  • 만약 최빈값이 여러 개일 경우의 반환 값에 대한 요구사항이 바뀐다면, 지금 접근한 방식에서 쉽게 수정할 수 있어 유연한 코드로 보여집니다.

  • alphabet.get(char, 0) + 1은 빈도 초기화를 더욱 간단히 해주며, dictionary의 기본값 설정으로 코드 가독성이 뛰어납니다.

관련 자료

알고리즘 문제를 푸는 방식에서 여러 최빈값 처리를 다루는 다른 방법들도 참고해보시면 좋습니다. 아래는 관련된 내용의 참고 링크입니다:

이처럼 다양한 방법으로 문제를 해결해보는 것이 중요하며, 현재 접근하신 방식이 매우 합리적입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

윤구님의 프로필 이미지
윤구

작성한 질문수

질문하기