인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

Jin님의 프로필 이미지
Jin

작성한 질문수

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

1-5 알고리즘과 친해지기 (2) - 최빈값(알파벳) 구하기

작성

·

42

0

1. 현재 학습 진도

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

     

  • 어떤 알고리즘을 학습하고 계신가요?: 최빈값 찾기(알파벳)

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

     

    1. 'a' -> ord('a') -> 97 -> chr(97) -> 'a' 이고, 'A' -> ord('A') -> 65 -> chr(65) -> 'A' 이다. 아스키 코드를 활용하고, 가장 기본이 되는 원리는 이렇다.

    2. 0이 26개인 배열(a_o_a)을 만들고, 주어진 문자열(string)을 반복문으로 순회한다. (for char in string: ... )

    3. ord('a') - ord('a') = 0 이고, ord('b') - ord('a') = 1 이고, ... 이 원리에 따라 ord(char) - ord('a') 를 하면, char가 몇 번째 순서의 알파벳인지 구할 수 있다. 이를 0이 26개인 배열(a_o_a)의 인덱스(i)로 활용한다.

    4. string을 반복문으로 순회하면서, (만약 숫자나 띄어쓰기가 아니고 알파벳이라면) a_o_a[i] += 1 을 한다. a_o_a 에 각 알파벳의 빈도수가 저장이 된다.

    5. a_o_a를 반복문으로 순회하면서, max_alphabet_index를 구한다.

    6. chr(max_alphabet_index + ord('a')) 을 하면 최종적으로 최다 빈도수인 알파벳이 구해진다.

     

 

2. 어려움을 겪는 부분

image.pngimage.png

 

저는 string.count(char)를 이용하여 풀었습니다. 그런데 이 아스키 코드 원리를 활용한 알고리즘이 많이 출제되나요? 코테 출제하시는 분들께서 아스키 코드를 활용한 로직을 더 선호하시는지 궁금합니다!

답변 1

0

딩코딩코님의 프로필 이미지
딩코딩코
지식공유자

안녕하세요 Jin 님! 좋은 질문 감사합니다.

문제의 핵심 부분을 정확하게 이해해주신 것 같습니다!

 

질문 부분에 대해서 말씀드려보겠습니다.

>저는 string.count(char)를 이용하여 풀었습니다. 그런데 이 아스키 코드 원리를 활용한 알고리즘이 많이 출제되나요? 코테 출제하시는 분들께서 아스키 코드를 활용한 로직을 더 선호하시는지 궁금합니다!

 

string.count(char)를 사용하면, 사실상 문자열 전체를 매번 순회하게 됩니다. 따라서 각 문자마다 문자열을 전부 탐색하므로 시간 복잡도는 O(N) * N, 즉 O(N²)가 되어 매우 비효율적입니다.

반면, 아스키 코드를 활용하면 한 번의 순회로 빈도를 계산할 수 있어 O(1) * N, 즉 O(N)의 시간 복잡도로 훨씬 효율적입니다.

아스키 코드를 반드시 활용해서 선호하는 것보다는, 더 작은 시간복잡도를 가지고 있기 때문에 선호한다고 봐주시면 될 것 같습니다

파이썬을 하다보면, 이처럼 내장함수라서 매우 간단해보이지만 생각보다 시간복잡도가 높은 함수들이 몇개 존재합니다. 따라서 이런 것들을 주의하면서 코드를 작성해야 할 것 같습니다

좋은 질문 감사합니다 미리 메리크리스마스 보내세요!

Jin님의 프로필 이미지
Jin
질문자

헉...그렇군요 내장함수라고 막 쓰면 안되겠네요

미리 메리크리스마스 보내세요~~

Jin님의 프로필 이미지
Jin

작성한 질문수

질문하기