파이썬 프로그래머스 코딩테스트 입문 오답노트 최빈값구하기
문제) 최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 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
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 |
아니 문제 난이도 편차 왜케심해욧,,,
'PYTHON' 카테고리의 다른 글
프로그래머스 파이썬 코딩테스트연습 입문 오답노트 한 번만 등장한 문자_python 알파벳순으로 문자열 정렬 구분자.join(sorted()) (0) | 2023.06.26 |
---|---|
파이썬 프로그래머스 코딩테스트 연습 2차원 만들기_.tolist() (0) | 2023.05.09 |
프로그래머스 코딩테스트 입문 오답노트 분수의 덧셈 (0) | 2023.05.05 |
파이썬 프로그래머스 오답노트 코딩테스트 입문 제곱수 판별하기: is_intiger() (2) | 2023.05.04 |
프로그래머스 파이썬 코딩 테스트 입문 오답 노트 - 숨어있는 숫자의 덧셈(1) (0) | 2023.05.03 |