문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/120812#
내 풀이
def solution(array):
answer = 0
# 중복을 없앤 리스트 set_list
set_list = list(set(array))
# 원소 count 개수를 담을 num_count
num_count = [0] * len(set_list)
# 중복이 없는 리스트 set_list를 순회하며..
# set_list의 원소 각각이 본래 list인 array에 몇 번있는지 확인
# -> 이 값을 num_count 배열에 차례대로 저장
for i in range(len(set_list)):
num_count[i] = array.count(set_list[i])
# set_list: [1, 3, 5, 7]
# num_count: [2, 2, 3, 2]
# num_count 배열에서 최빈값을 가진 값의 인덱스
# (위의 예시일 때 값은 2(최빈값이 3이므로, 숫자 3의 인덱스는 2임))
mode_idx = num_count.index(max(num_count))
# 횟수를 담은 배열에서 최빈값이 1개가 아니면 answer = -1
if num_count.count(max(num_count)) != 1:
answer = -1
# 최빈값이 1개이면, set_list에서 최빈값 인덱스에 해당하는 값을 뽑아옴
else:
answer = set_list[mode_idx]
return answer
과정:
먼저, 주어진 리스트에서 중복을 없앤 리스트 set_list를 구했다. 최빈값 없이 어떤 원소들로 리스트가 채워졌는지 보기 위해서이다.
다음으로, 각 원소의 개수를 담을 새로운 배열을 만들었는데, 이 길이는 주어진 리스트에서 중복되지 않은 원소의 개수(len(set_list))로 설정하였다.
이제, 중복을 없앤 리스트 set_list를 순회하면서, 중복되지 않는 개별의 원소가 본래 문제로 주어진 array 안에 몇 번 있는지 숫자를 센다. (array.count(set_list[i]))
이는 각 원소의 개수를 담을 num_count 배열내에 동일한 인덱스 위치에 저장을 한다!
모든 개별 원소를 순회한 뒤, num_count 배열에서 최대값을 가진 값의 인덱스를 mode_idx로 저장한다.
최빈값이 1개가 아니면, answer을 -1로 지정하고, (이 때, 판단 방법은... 최빈값을 count 메소드로 몇 번 나왔는지 센다)
최빈값이 1개라면 set_list 리스트의 최빈값 인덱스에 해당하는 값을 뽑아온다.
주석 없이 코드만 나타낸 것은 아래와 같다!
def solution(array):
answer = 0
set_list = list(set(array))
num_count = [0] * len(set_list)
for i in range(len(set_list)):
num_count[i] = array.count(set_list[i])
mode_idx = num_count.index(max(num_count))
if num_count.count(max(num_count)) != 1:
answer = -1
else:
answer = set_list[mode_idx]
return answer
다른 사람 풀이
def solution(array):
answer = 0
# 원소 1개씩
set_array = set(array)
max_count = 0
# 각 원소의 개수를 구하고 가장 많은 개수를 가지고 있는
# 원소를 저장, 같으면 -1
for i in set_array:
count = array.count(i)
if max_count < count:
max_count = count
answer = i
elif max_count == count:
answer = -1
return answer
: 위의 코드에서는 최빈값을 나타내는 값 max_count를 지정해두고,
중복이 없는 배열(set_array)를 순회하며, 본래 array에서 각 값이 몇 번 나왔는지 할당한다.
만약, 최빈값(max_count)과 순회하면서 측정하는 각각의 count 값을 비교했을 때, count가 더 크면 그 값을 새롭게 최빈값에 배정하고,
만약 최빈값과 똑같은 count 값이 나오면 최빈값이 여러개이므로 answer은 -1로 지정한다!
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 2차원으로 만들기 (0) | 2024.02.29 |
---|---|
[프로그래머스][PYTHON] Lv. 0 피자 나눠 먹기 (2) (1) | 2024.02.23 |
[프로그래머스][PYTHON] Lv. 0 중앙값 구하기 (0) | 2024.02.22 |
[프로그래머스][PYTHON] Lv. 0 분수의 덧셈 (0) | 2024.02.22 |
[프로그래머스][PYTHON] Lv. 0 정수를 나선형으로 배치하기 (0) | 2024.02.19 |