inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

동일 값 로직 처리

해결된 질문

216

dkw gh

작성한 질문수 2

0

1. 현재 학습 진도

 

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

 

image.png

3. 시도해보신 내용

 안녕하세요. 첨부한 코드 중 주석 처리한 부분은 문제를 보고 사전에 제가 작성한 코드입니다. 결과는 예상과 동일하게 출력됩니다.

그 밑에는 다른 풀이 방법을 찾다가 Counter 클래스를 사용하여 작성한 코드입니다. 본 강의에서는 카운터가 동일한 경우, 기존의 값을 변경하지 않는 방식이라 i가 출력되지만, 해당 방법을 사용하면 입력 순으로 o가 출력됩니다.

이 경우 최빈값을 찾아내는 코드는 맞지만, 값이 동일한 경우에 처리하는 로직이 다르기 때문에 발생한다고 이해하면 될까요?

답변해주신다면 감사하겠습니다.

python 코딩-테스트 알고리즘 data-structure

답변 2

0

딩코딩코

안녕하세요 dkw gh 님! 좋은 질문 감사합니다 ㅎㅎ

두 코드가 다른 값을 반환하는 이유는 동일한 빈도의 알파벳이 존재할 때, 최댓값을 판단하는 기준이 다르기 때문입니다.

차이점 분석

첫 번째 코드 (Counter 기반 코드):

  1. Counter는 입력된 문자열의 문자 순서를 유지하며, 각 알파벳의 개수를 세는 딕셔너리 형태로 동작합니다.

  2. max(counter, key=counter.get)동일한 빈도의 문자가 여러 개일 때, 먼저 등장한 문자를 반환합니다.

두 번째 코드 (수동 탐색 코드):

  1. 모든 알파벳(a-z)을 순회하면서 입력 문자열에서 해당 알파벳의 개수를 직접 계산합니다.

  2. max_occurrence 값이 갱신될 때만 max_alphabet을 업데이트합니다.

  3. 알파벳 배열을 a-z 순서로 순회하므로, 동일 빈도의 문자가 존재하면 사전 순으로 가장 앞에 있는 알파벳이 반환됩니다.

 

즉, 동일한 빈도일 경우 반환하는 알파벳의 순서 로직이 다르기 때문에 발생한 경우라고 보시면 됩니다! 따라서 좋은 코드를 작성해주셨지만, 구현 방향성에 따라 다른 것이기 때문에 다른 값이 나왔다. 올바른 코드다 라고 봐주시면 될 것 같습니다!

0

인프런 AI 인턴

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

질문해주신 내용은 최빈값을 찾을 때 동일 값 처리의 차이에 대한 것입니다.

주석 처리된 코드와 Counter 클래스를 활용한 코드는 둘 다 문자열에서 가장 많이 발생하는 문자를 찾는 기능을 수행합니다.

차이점 설명

  1. 직접 구현 방식 (주석 처리 코드):

    • 알파벳 배열을 초기화하고 문자열을 순회하여 각 알파벳의 발생 빈도를 저장합니다.
    • 두 단계로 나누어 최대 빈도 수와 그 값을 찾습니다.
    • 이 코드에서는 동일한 빈도의 값이 존재할 때 가장 먼저 높은 빈도에 도달한 알파벳이 유지됩니다.
  2. Counter 클래스 이용:

    • Counter 객체를 사용해 자동으로 각 문자 빈도를 계산합니다.
    • max(counter, key=counter.get)를 이용하여 가장 빈도가 높은 문자를 반환합니다.
    • 동일한 빈도의 문자가 있을 경우, Counter는 입력 순서대로 저장하기 때문에 입력 순서상 먼저 등장한 문자가 반환됩니다.

이 차이가 발생하는 이유는 Counter 클래스가 동등한 빈도를 가진 문자들 중 처음 등장한 것을 반환하도록 설계되었기 때문입니다. 따라서, 코드를 작성할 때 어떤 상황에서 어느 방식이 더 적합할지를 염두에 두시면 좋습니다.

관련 내용에 대한 기존 질문과 답변은 아래 링크에서 더 찾아보실 수 있습니다:

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

수강평 이벤트

0

34

2

코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요

0

70

2

3-3 정렬-2 선택정렬 로직

0

43

2

링크드 리스트 끝에서 k번째 값 출력하기

0

46

2

LinkedList 과제 Fast, slow 포인터

0

50

2

투포인터 시간복잡도

0

53

2

수강평 작성 후 자료

0

53

2

수업교재 링크 오류

2

114

2

프로그래머스에서 제출 후 채점시 틀림ㅠ

0

133

2

1-10 알고리즘 더 풀어보기(2) 질문 있습니다

0

76

2

문제 풀이 방식 관련 질문입니다!

0

88

2

1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다

0

94

2

수업자료 pdf 받고싶습니다

0

108

2

강의 자료 오류 수정

0

75

1

2-10 더하거나 빼거나 관련 질문입니다

0

63

2

3-8 해쉬 -2

0

49

2

Linked List Element Delete Explanation Problem

0

69

2

강의3-4 스택 탑 문제

0

74

2

코드스니펫 입출력 케이스에 오류가 있는것 같아요

0

100

3

링크드 리스트 원소 찾기 구현 방식 질문드립니다.

0

76

2

1874 - 스택 문항

0

81

2

DP Java 예제 자료형 오버플로우 문제

0

100

2

4-9 4주차 숙제중 농심라면 문제

0

111

2

DFS 에서 스택을 사용하는 이유

1

187

3