리스트를 입력받아서 빈도수가 가장 높은 요소 출력하는 프로그램

  • 예시 ) 입력: [‘a’, ‘b’, ‘c’, ‘a’, ‘a’, ‘b’, ‘c’] 출력: ‘a’
  • 빈도수가 같은 요소가 2개 이상일 경우, 가장 앞에 있는 요소 출력

방법 1. 함수를 사용하지 않고, 로직만들기

def most_frequent(data):
    length = len(data)
    arr = [0 for i in range (length)]
 //크기를 정해 미리 초기화

    for i in range(length):
        for j in range(i+1, length):
            if data[i] == data[j]:
                    arr[i] += 1
    max = 0
 //빈도수가 담긴 arr의 가장 큰 값(data의 index)을 담을 변수
    for i in range(length):
        for j in range(i+1, length):
            if arr[i] < arr[j]:
 
                max = j
    return data[max]

2. count, max, index 함수를 이용한 로직만들기

def most_frequent(data):
    count_list=[]
 //count를 담을 리스트 변수 설정
    for x in data: 
        count_list.append(data.count(x))
 
        //append를 사용하여서 크기를 미리 정하지 않고 초기화 가능
    return data[count_list.index(max(count_list))]

1번과 2번의 공통점 : 전달받은 리스트와 크기가 같은 count리스트를 만들어서, value가 가장 큰 요소를 리스트의 index로 활용한다.

차이점:

  1. append()를 사용하면 처음에 빈 리스트를 활용할 수 있다.
  2. index(),max()를 활용하면 두번째 for문을 사용하지 않아도 배열의 가장 큰 값 중 처음 index를 반환받을 수 있다.

3. max, count 함수만으로 한 줄 로직만들기

def most_frequent(data):
    return max(data, key=data.count)

max함수의 설명

max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value

특히 max 함수는 literal 변수를 넣고, key를 이용해서 function함수를 잡는것이 가능하다는것이 쇼크.. 공부를 하자!

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ사실 1번이 내꺼고.. 2번은 다른 수강생분꺼고 3번은 선생님꺼인데… 내 코드 다 갖다버려…

내 로직을 짜는거도 좋지만 내장 함수를 잘 이용해서 성능이 좋은 알고리즘을 짜야겠다는 생각이 든다.

Leave a comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다