프로그래머스

[프로그래머스] 최빈값 구하기_python

미스터 한뺑 2023. 4. 9. 14:13
반응형

1. 문제

1 - 1. 문제 설명

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 retrun 하도록 solution 함수를 완성해보세요, 최빈값이 여러 개면 -1을 return 합니다. 

1 - 2. 제한사항

  • 0<= array의 길이 <=1000
  • 0<= array의 원소 <= 1000

1 - 3. 입출력 예 설명

  • 입출력예 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입니다.

2. 문제해결방법

def solution(array):
	count = [0] * (max(array)+1) # 숫자 출연 횟수를 셀 리스트

	for i in array:
		count[i] += 1

	m = 0 # 최빈값의 개수
	for c in count:
		if c == max(count):
			m += 1
    
	if m > 1: # 최빈값이 2개 이상이면 -1을 리턴
		return -1
	else: # 최빈값이 1개이면 해당 숫자를 리턴
		return count.index(max(count))

array=[1,1,2,2]이라고 가정했을때

1. 각 인덱스마다 횟수를 정해 놓을 리스트를 count로 정의를 했다. 왜 +1해줬냐면 다음 for문을 돌릴때 array는 인덱스는 3까지 있는데 count는 2 밖에 없기 때문이다. 그래서 count는 [0, 0, 0]이 나온다

2.  for문을  돌려서 중복되는 수를 카운트하게 된다.  [0, 1, 0] [0, 2, 0] [0, 2, 1] [0, 2, 2]

3.  [0,2,2]가 count의 값이 된다. 그래서 for문을 돌려 하나씩 꺼내서 max(count)가 최빈값이 되는거니까 최빈값의 개수를 정한다.

4. 그래서 조건문을 이용해 만약에 최빈값이 1개가 넘으면 -1을 반환하고 아니면   최빈값의 인덱스를 구한다.

 

 

4. 느낀점 

0레벨 문제 였지만 난이도가 있는 문제였다. 중간에 풀지 못해서 다른 사람의 코드를 보고 겨우 풀 수 있었다.

이제 1레벨을 슬슬 풀려고 생각하는데 이 문제의 난이도랑 비슷하면 과연 내 힘으로 풀수 있을까라는 생각이든다.

 

반응형