커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
find_max_occurred_alphabet 의 시간 복잡도와 빅오 표기법
undefined주차
북마크
댓글
1
추천
0
조회수
8
조회수
8
답변 완료

강의의 2번째 방법에서는 입력 받은 문자열을 돌면서 알파벳의 빈도수를 모두 업데이트 한 뒤

알파벳 빈도수가 들어있는 리스트를 돌면서 빈도수가 가장 높은 알파벳의 인덱스를 찾는 방법이었습니다.


아래 제가 작성한 코드는 2번째 방법과 비슷하면서 조금 다르게 구성하여

입력 받은 문자열을 돌면서 알파벳의 빈도수를 업데이트 한 뒤 바로 가장 높은 알파벳인지 바로 확인하였습니다.


제가 작성한 코드에서

  • 잘못된 부분은 없는지..?
  • 시간 복잡도를 아래와 같은 과정(주석 참고)으로 계산하는 것이 맞는지
  • 4N+3 즉, N만큼의 시간이 걸렸으며 빅오 표기법으로 O(N) 이 맞는지 질문 드립니다!


def find_max_occurred_alphabet(p_input):
  alphabet_occurrence_array = [0] * 26 # 대입연산 1번
  standard = ord('a') # 대입연산 1번
  max_idx = 0 # 대입연산 1번
  # >> 대입연산 3번
  
  # p_input 길이(n)만큼 아래 연산이 실행
  for item in p_input: 
    if item.isalpha() == True: # 비교연산 1번
      item_idx = ord(item) - standard  # 대입연산 1번
      alphabet_occurrence_array[item_idx] += 1  # 대입연산 1번
      item_occurrence = alphabet_occurrence_array[item_idx] # 대입연산 1번
      
      if item_occurrence > alphabet_occurrence_array[max_idx]: # 비교연산 1번
        max_idx = item_idx # 대입연산 1번
  # >> p_input의 길이 * (비교연산 2번 + 대입연산 2번) = 4N
  
  return chr(max_idx + 97), alphabet_occurrence_array[max_idx]


input = "hello my name is sparta"
result = find_max_occurred_alphabet(input)
print(result) # >> ('a', 3)
print(f"'{input}'에서 '{result[0]}' 가 총 {result[1]} 번으로 가장 많이 나옴")
취소
 공유
취소
댓글 0
댓글 알림
나의얼굴