728x90
입출력의 예시처럼 나오는 방법이 정말 다양하게 있는데, 그것을 어떻게 처리하면 좋을지 고민했다.
때마침, 수업시간에 배운 함수들 중 set 함수가 생각이 났지만 어떻게 이용하면 좋을까?
그 방법은 개수가 적은 숫자들을 제거하는 것이다.
하나씩 제거해나가면 결국에는 최빈값만 남을 것이라고 나름의 역발상을 해보았다.
아래의 주석에 설명글을 써놓았기 때문에 주석을 참고하면서 보시면 이해가 빠를 것이다.
def solution(array):
# 시작할 때 array는 0이 될 수 없음을 이용
while len(array) != 0:
# set를 이용함
for i, a in enumerate(set(array)):
# 배열에 있는 a들을 하나씩 소거
# [1, 1, 2, 3, 3, 3, 4] >> [1, 3, 3, 4] >> [3]
array.remove(a)
# a가 하나만 남을 경우 i는 0이 되므로 다음 식 성립
# set 안에 a가 여러 개 있든 상관 없음. set([n, n]) = (n)
if i == 0: return a
# 그러나 최빈값이 동률인 것들이 있을 경우, 결국 len(array)는 0이 되기 때문에
# 위 과정을 끝까지 거치지 않고 바로 return -1로 이동
return -1
이렇게 해결하신 분들도 많다.
def solution(array):
answer = 0
check = {}
for ar in array:
if ar not in check:
check[ar] = 1
else:
check[ar] += 1
sorted_check = sorted(check.items(), reverse=True, key=lambda item: item[1])
if len(sorted_check) > 1:
if sorted_check[0][1] != sorted_check[1][1]:
answer = sorted_check[0][0]
else:
answer = -1
else:
answer = sorted_check[0][0]
return answer
이건 아직 이해를 잘 못하지만.. 알아내게 된다면 다시 끄적여보겠습니다
'cording test' 카테고리의 다른 글
LV.0 가위바위보 (0) | 2023.04.07 |
---|---|
LV.0 로그인 성공 (0) | 2023.04.05 |
LV.0 숫자 찾기(enumerate, find 함수를 통한 해결) (4) | 2023.03.31 |
LV.0 배열의 유사도 (1) | 2023.03.30 |
LV.0 : ["세균 증식"], ["OX 퀴즈"] (2) | 2023.03.22 |