[코딩 테스트 연습 입문] 최빈값 구하기
문제
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
❗제한사항❗
- 0 < array의 길이 < 100
- 0 ≤ array의 원소 < 1000
입출력 예
입출력 예 설명
입출력 예 #1
- [1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다.
입출력 예 #2
- [1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다.
입출력 예 #3
- [1]에는 1만 있으므로 최빈값은 1입니다.
🔥그동안의 시도
이건 처음에 짰던 코드다. 분명 완벽하다고 생각했는데 런타인에러가 떴다..^^
다시 짜야했고, 어떤 부분에서 줄여볼까 생각을 하다가 초반을 아예 count와 같은 걸로 짜야겠다는 생각이 들었다.
count로 넣었는데 여전히 테스트 8,9,10 실패...
그렇다면 value_list 부분부터 수정을 봐야하나보다.
더 많은 테스트가 런타임 에러가 떴다. 그럼 어떤 걸 고쳐야할까? 고민하는중...
좀 더 단순하게 생각해야 한다는 압박감이 느껴졌다.
그 후 나온 결과가 바로 아래의 풀이!
✔풀이
def solution(array):
answer = 0
array_dict={}
for i in array:
if i not in array_dict.keys():
array_dict[i]=array.count(i)
else:
pass
values_array=list(array_dict.values())
max_value=max(values_array)
if values_array.count(max_value)>1:
answer=-1
else:
for key,value in array_dict.items():
if value==max_value:
answer=key
break
return answer
📝설명
너무 어렵게 느껴져서 며칠을 고민했다. 그 과정들을 소개합니다..
문제에서는 최빈값을 retrun 하라고 했다.
큰 그림을 설명하자면, array에서 숫자를 순서대로 꺼내면서 빈 딕셔너리에 key값은 숫자, value는 숫자가 얼마나 등장했는지를 저장하도록 한다.
딕셔너리의 value값을 따로 부른 값을 values_array에 저장한 후, 가장 큰 값을 max를 이용하여 뽑아내고 따로 저장한다.
뽑아낸 max value값을 value_array에 중복된 값이 있는지 count를 활용하여 개수를 센다.
이 때 결과값이 1을 초과한다면, 최빈값이 여러 개라는 것이니 -1을 return하도록 한다.
만약 결과값이 1이라면, 최빈값이 하나라는 의미이다.
for문을 이용하여 key와 value값을 array_dict에서 동시에 탐색하도록 한다.
여기의 value가 앞서 뽑았던 max_value와 같다면 key값을 출력하도록 한다.
헷갈리지 말아야 하는 부분은 만약 array가 [1,2,3,3]이면 return 값으로 3을 뽑아내야 한다는 것! 절대 3의 최빈값인 2가 아니다.
➕개선한다면?
👑모범 답안
👀느낀 점
: 너무 많은 시간을 투자해서 막막하게 느껴지기도 했다.
처음으로 런타임오버..까지 뜨니까 맞은건데도 억울한 느낌도 들었다 ㅋㅋㅋ ㅠㅠ
내 노력이 부정당한 것 같았는데, 막상 해결하고 나니까 뿌듯하다.
이게 내가 이 길을 선택한 이유이기도 하다.
계속 뿌듯함을 느끼기 위해서는, 내가 발전해야 한다.