티스토리 뷰
문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 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입니다.
오늘의 입문 문제 두 번째부터 머리가 굳어버렸다. 최빈값 .... ? 내가 아는건 mode가 다인걸 ..
이건 계속 고민할 게 아니라, 다른 사람들은 어떻게 풀었는지 보는게 더 중요하다. 다른 라이브러리 (math, counter, stats 등)을 활용하여 푸는 것이 아닐까 .. 라는 생각에
사람들이 푼거 슬쩍 보니 다들 if문, while문, 딕셔너리 등으로 만들었다. 구현하는 데에 시간이 꽤 거릴듯 하다. 특히나, 나는 딕셔너리에 매우 약하다. 이참에 딕셔너리를 완벽하게 이해해보자 !
우선 지피티와 함께 풀었다. 딕셔너리 활용을 잘 못하기 때문에 애초에 답과 함께 과정을 이해해 나갔다. 답을 본 순간, 이해는 바로 됐다만 .. 과연 내가 혼자서 다시 풀 수 있을까 ?
일단 주어진 array 안에서 for문으로 숫자들을 하나씩 방문했다. 빈 딕셔너리 freq를 만들고, 그 안에 array 숫자들을 하나씩 넣고, 횟수(value)도 추가했다. 그다음, 가장 큰 value를 구한 다음, most_freq 라는 리스트를 새로 만들어, 해당하는 value의 num을 저장시켰다. 마지막으로 if문으로 most_freq 안의 개수가 1개일 경우 해당하는 숫자를 출력하고, 아니면 -1을 출력하도록 하였다.
최종 코드는 다음과 같다.
def solution(array):
freq = {}
for i in array:
if i in freq:
freq[i] += 1
else:
freq[i] = 1
max_freq = max(freq.values())
most_freq = [num for num, count in freq.items() if count == max_freq]
if len(most_freq)==1:
return most_freq[0]
else:
return -1
끝 !
'coding test > 프로그래머스' 카테고리의 다른 글
[코딩테스트 기초] 문자열 여러 번 뒤집기 (0) | 2024.12.23 |
---|---|
[프로그래머스 Lv. 1] 실패율 (1) | 2024.12.18 |
[프로그래머스 Lv. 1] 비밀지도 (1) | 2024.12.17 |
[프로그래머스 Lv. 1] 숫자 문자열과 영단어 (0) | 2024.12.17 |
[코딩테스트 입문] 분수의 덧셈 (0) | 2024.12.16 |