[문제 설명]
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 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입니다.
[KANU식 코드]
def solution(array):
#중복제거
ar_set = list(set(array))
if len(ar_set)==1:
return ar_set[0]
#중복 제거된 원소들이 array에 각각 몇개 있는지 확인
ar_count=[]
for i in range(len(ar_set)):
count = 0
for j in range(len(array)):
if(ar_set[i]==array[j]):
count = count+1
ar_count.append(count)
sort_count = sorted(ar_count)
if sort_count[-1]==sort_count[-2]:
return -1
else:
return ar_set[ar_count.index(max(ar_count))]
set를 통해서 중복되는 원소들을 제거한 후
각 원소별로의 count를 리스트화 해서
이를 정렬하고, 마지막 두 카운트가 같다면 -1,
아니라면 해당 카운트의 인덱스에 해당하는 원소값을 리턴하는 방식
[다른분들 코드]
def solution(array):
while len(array) != 0:
for i, a in enumerate(set(array)):
array.remove(a)
if i == 0: return a
return -1
array의 길이가 0이될때까지 루프
-> array를 집합화 시켜서 enumerate로 인덱스와 객체 뽑아내 #생각해보니까 set하면 애초에 정렬이 되네
-> array에서 모든 집합의 원소를 한번씩 제거 #이게 아이디어네
-> 이제 set(array)를 했을때 원소가 하나밖에 남지 않는다면 => 최빈값이 두개가 아니라는 얘기, a를 리턴
-> 위의 상황에 걸리지 않는다면 => -1을 리턴
어떻게 이런생각이 나는지 신기할 따름
'개발 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv.0] - 연속된 수의 합 (0) | 2023.03.01 |
---|---|
[프로그래머스 Lv.0] - 분수의 덧셈 (0) | 2023.03.01 |
[프로그래머스 Lv.0] - OX퀴즈 (0) | 2023.02.28 |
[프로그래머스 Lv.0] - 다음에 올 숫자 (0) | 2023.02.27 |
[프로그래머스 Lv. 0] - 옹알이 (1) (0) | 2023.02.27 |