Algorithm ⎮ 알린이의 모험 2.

Chris-Yang·2021년 10월 3일
1

Algorithm

목록 보기
2/12
post-thumbnail

> list에서 과반수 숫자 반환하기

▶︎ 문제

숫자로 이루어진 배열인 nums를 인자로 전달합니다.

숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.

예를 들어,

nums = [3,2,3]
return 3

nums = [2,2,1,1,1,2,2]
return 2


▶︎ 풀이

def more_than_half(nums):
    # 아래 코드를 입력해주세요.
    results = {}

    for el in nums:
      if el not in results:
        results[el] = 1
      else:
        results[el] += 1

    max_key = max(results, key = results.get)
    return max_key

▶︎ 포인트

빈 객체를 만들어놓고
list의 요소들을 반복문으로 확인하며 객체에 해당하는 key가 없으면
새로 요소 만들어 value로 최초 카운트인 1을 줬고
key가 있는 경우 value를 +1하는 방식으로 list에 있는 중복요소 갯수를 조사했다.

조사가 끝난 객체의 요소 중에서 value가 가장 큰 key를 리턴함.

💡 counter 함수를 사용하는 경우도 있었음.





> 출현빈도 높은 숫자 순서로 반환하기

▶︎ 문제

nums는 숫자로 이루어진 배열입니다.

가장 자주 등장한 숫자를 k 개수만큼 return 해주세요.

nums = [1,1,1,2,2,3],
k = 2

return [1,2]

nums = [1]
k = 1

return [1]


▶︎ 풀이

def top_k(nums, k):
    # 빈 dict/list 생성
    bin_dict = {}
    bin_list = []


    # 배열 요소들 객체에 넣으며 카운트
    for i in nums:
      if not i in bin_dict:
        bin_dict[i] = 1
      else:
        bin_dict[i] += 1    
    # print('bin_dict :', bin_dict)


    # vlaue가 큰 순서대로 뽑아 - key를 배열에 다시 담고 - 해당 property 삭제
    i = 1
    while i <= len(set(nums)):
      biggest = max(bin_dict, key=bin_dict.get)
      # print('biggest :', biggest)
      bin_list.append(biggest)
      del bin_dict[biggest]
      i += 1

    # 가장 자주 등장한 숫자의 순서대로 k의 값만큼 잘라서 리턴
    return bin_list[:k]


print(top_k([1,1,1,2,2,3,3,3,3], 2))

▶︎ 포인트

빈 객체를 만들어 list를 순회하며 해당 요소를 key로 하는 요소가 없으면
value를 1로 하여 새로 만들고 요소가 있으며 +1 카운트.

빈 list를 만들어 while문으로 객체에서 vlaue가 가장 큰 key를 list에 넣고
넣은 key는 삭제하여 다음 반복시에 중복해서 리턴되지 않게 함.





🌈 작은 회고 🤔

유난히 고난이 많은 한 주였다.

수요일부터 금요일까지 일정이 끝나면 거의 바로 상가집에 가고
토요일엔 2차 백신을 맞고 하루 종일 쓰러져있었다.

그래도 그와중에 단순하고 기초적인 문법과 로직이지만
혼자힘으로 문제를 풀어냈다는게 조금은 고무적이다.

지난 추석때 기초문법 강의를 모두 본 것이 약간의 효과는 있는 것 같다.

그건 그렇고 오늘은 무엇보다 가족을 떠나보내고 남은 내 소중한 사람과 가족분들이
앞으로 행복한 날들만 맞이하시기를 바라는게 더 먼저인 것 같다.

이 글을 보시는 분도 모두 행복만 가득하시기를...!

profile
sharing all the world

0개의 댓글