본문 바로가기
PYTHON

파이썬 프로그래머스 코딩테스트 입문 오답 노트 최빈값 구하기

by jnhn 2023. 5. 6.

 

파이썬 프로그래머스 코딩테스트 입문 오답노트 최빈값구하기


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

 

와진짜 이 문제 도저히 못풀겠어서 이틀 고민하고 구글링해보고야 말았다.

정답1) 중복제거 set함수 이용_DalHyun , 포메 , RYEZYI , cjswoxorb@gmail.com 외 110 명

def solution(array):
    while len(array) != 0:
        for i, a in enumerate(set(array)):
            array.remove(a)
        if i == 0: return a
    return -1

이렇게 심플하게 풀 수 있는 문제였다니 물론 set 함수를 제대로 사용해본게 처음이라 고민한다고 풀리는 문제는 아니었던것으로.. 암튼 다들 감탄한거보면 이 풀이가 정말 명쾌하다는걸 의미하는거겠지

이거마저도 이해를 돕기 위해 다른 사람 블로그를 참고했다. https://dduniverse.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%B5%9C%EB%B9%88%EA%B0%92-%EA%B5%AC%ED%95%98%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-Python

 

프로그래머스 | 최빈값 구하기 [파이썬 Python]

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 def

dduniverse.tistory.com

enumerate는 인덱스와 요소를 함께 반환하는 함수로 위 코드에서 i는 인덱스, a가 요소인 셈

즉, set이라는 python 내장함수는 중복되는 값을 제거해주는 함수로 그걸 이용해 중복된 것을 지우면, 결국 최빈값 하나만 남게 되는 것이다. 결론적으로 최빈값만이 return되는 것

반 최빈값이 2개이상이라면 for문이 계속 돌아서 결국 array의 길이는 0이 된다. 그러면 -1이 리턴되는것

set함수
문법 set(a)
설명 중복된 값 삭제 
enumerate 함수
문법 enumerate(리스트)
예)
ename =['SCOTT','ALLEN','KING','SMITH']
for num, i in enumerate(ename):
    print(num, i)
설명 리스트의 요소들을 인덱스 번호와 함께 짝지어 줌
cf) zip(리스트1, 리스트2): 리스트1과 리스트 2의 요소들의 순서에 따라 짝지어주는 함수

정답2) collections 모듈 counter이용_ 김현우 , syj01092985114@gmail.com , 김연태 , gun1kim 외 4 명

from collections import Counter

def solution(array):
    a = Counter(array).most_common(2)
    if len(a) == 1:
        return a[0][0]
    if a[0][1] == a[1][1]:
        return -1
    return a[0][0]
collections 모듈 Counter 中 most_common(n)
문법 from collections import Counter
Counter(a) #a에서 각각의 값들이 몇번 나오는지 세어서 출력
Counter(a).most_commen(b) #a에서 최빈값 b

아니 문제 난이도 편차 왜케심해욧,,,