Python/알고리즘 문제 풀이

[코테] 최빈값 구하기

마이구미+ 2023. 3. 29. 12:20

<로직 고민>

# for문을 써서 값을 하나씩 꺼낸다
# 배열 길이의 변수들을 생성한다?
# 변수들에 각 값을 넣는다 값이 들어간 변수 중에 같은 값이 있으면 그 변수에 값을 추가한다
# 변수 중 길이가 제일 긴 변수를 찾는다
# 길이가 긴 변수가 2개 이상이면 -1을 반환
# 배열 길이가 1이면 그 값을 반환 if문을 먼저 써야겠군
  • 이렇게 로직을 짜긴 했는데 도저히 어떻게 코드를 만들어야 할지 모르겠어서 결국 힌트를 봤다
  • 방향이 조금 틀린 거 같다
  • 힌트를 토대로 로직을 다시 만들어봤다
# 배열 길이의 변수들을 생성한다? -> 카운트 딕셔너리를 생성!!
# for문으로 배열에서 값을 하나씩 꺼낸다 
# 카운트 딕셔너리 키값에 배열의 값이 없으면 그 값으로 키값을 추가하고 밸류는 1로 한다
# 배열 값이 계속 도는데 값이 카운트 딕셔너리의 키값과 같은 게 있다면 해당 키의 밸류에 1을 더해준다
# for문이 다 돌면 딕셔너리가 완성되고 키값은 배열에 있는 값들(중복x)이 되고 밸류는 그 값들이 몇 개씩 들어있는지 들어가있다
# 그 딕셔너리에 밸류값만 가져와서 가장 높은 숫자를 찾는다 그 숫자의 키값을 반환한다
# 가장 높은 숫자가 2개 이상이면 -1을 반환한다
# 배열 길이가 1이면 그 값을 반환 if문을 먼저 써야겠군
  • count 딕셔너리 생성까지는 했는데 밸류값 비교하는 것이 막혀서 다시 한 번 힌트를 봤다....
  • 딕셔너리 생성이 끝이 아니고 앞에 값들을 정렬해줘야 하는 것이 필요했다,,,,
  • 밸류를 기준으로 내림차순 정렬해야 하는데 방법을 몰라서 구글에 '파이썬 sorted dict'로 검색했다
  • Python - dict 정렬 (Key, Value로 sorting) (codechacha.com)
 

Python - dict 정렬 (Key, Value로 sorting)

dict(dictionary)를 Key 또는 Value를 기준으로 정렬하는 방법을 소개합니다. 다음과 같이 sorted()를 이용하여 dict를 정렬할 수 있습니다. 인자로 my_dict.items()를 전달하면 오름차순으로 정렬됩니다. 내림

codechacha.com

  • 여기서 방법을 찾았다
sorted_dict = sorted(my_dict.items(), key = lambda item: item[1], reverse = True)
print(sorted_dict)

- 중간코드

def solution(array):
    # answer = 0
    count = {}
    for i in array:
        if i not in count:
            count[i] = 1
        else:
            count[i] += 1

    sorted_count = sorted(
        count.items(), key=lambda item: item[1], reverse=True)
    print(sorted_count)


a = [2, 5, 13, 5, 1, 2, 13]
solution(a)

# 출력화면
# [(2, 2), (5, 2), (13, 2), (1, 1)]
  • 이제 여기서 높은 밸류가 1개면 그 값 반환, 2개 이상이면 -1을 반환하면 된다
  • 근데 그 전에 배열의 길이가 1 보다 큰지 조건문을 걸어준다 1보다 크다가 False이면 딕셔너리의 첫 번째 밸류값을 반환한다

<완성한 코드>

def solution(array):
    answer = 0
    count = {}
    for i in array:
        if i not in count:
            count[i] = 1
        else:
            count[i] += 1

    sorted_count = sorted(
        count.items(), key=lambda item: item[1], reverse=True)
    if len(sorted_count) > 1:
        if sorted_count[0][1] != sorted_count[1][1]:
            answer = sorted_count[0][0]
        else:
            answer = -1
    else:
        answer = sorted_count[0][0]
    return answer


a = [2, 5, 13, 5, 1, 2, 13]
print(solution(a))

# 출력화면
# -1

  • 이 문제만 지금 몇 분만에 푼 거지...??
  • 거의 1시간 된 거 같은데 ^^;;;;
  • 열심히 해야겠따,,,
  • 근데 이것도 내 힘으로 온전히 했다기보다 힌트 보고 거의 베낀 거나 다름 없......다..
  • 물론 보고 그대로 따라 쓴 게 아니라 힌트 보고 이래서 이렇게 하는구나 이해하고 안 보고 코드 짠 거긴 한데...!!
  • 다음엔 힌트를 최대한 안 보고 풀었음 좋겠당,,,