코테 공부/python
Python 최빈값 관련 의문- 해결
sweet-po
2023. 5. 25. 00:30
문제
정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
set으로 중복값 제거하고 그걸로 array 내용물 날려가면서 남은 최빈값 찾으려고
array 길이가 1이 될때를 체크해야 결과값을 얻을 수 있을 것이라 생각하고 짰다.
def solution(array):
while len(array) != 0:
if len(array) == 1:
return array[0]
for idx, val in enumerate(set(array)):
array.remove(val)
return -1
그런데 다른 사람의 풀이를 봤을 때
def solution(array):
while len(array) != 0:
for idx, val in enumerate(set(array)):
array.remove(val)
if idx == 0: return val
return -1
저 if 문이 while 문 안에 포함되는 거면 예상한 답이 안나올 텐데 하면서 while 문 안에 print 찍어가면서 해봤는데..
def solution(array):
while len(array) != 0:
for idx, val in enumerate(set(array)):
array.remove(val)
for entry in enumerate(array):
print(entry)
if idx == 0: return val
(0, 1) (1, 5) (2, 5) (3, 5) (4, 2) (5, 5) (6, 1) (0, 5) (1, 5) (2, 5) (3, 1) (0, 5) (1, 5) |
이렇게 index 가 0인게 여러개 나오는데 if문에서 왜 마지막꺼만 인식하지? while문 안에 있는데?
def solution(array):
while len(array) != 0:
for idx, val in enumerate(set(array)):
array.remove(val)
if idx == 0: return val #이부분 앞으로 땡김
return -1
if문 들여쓰기 하나 더 들여쓴 이거랑 결과가 같았다.
이거면 차라리 맨 마지막에 데이터가 남은 idx == 0 인 val이 나오는걸 이해하겠는데..
왜지...왜... 파이썬은 들여쓰기로 블럭 구분되는거 아녔나..
--천재만재 홍★경님
들여쓰기 블럭 구분 맞고
for문 돌렸을 때 idx가 0인거랑 val 값이 같이 모든 히스토리가 남는게 아니라
for 문 다 돌리면 남는 idx 와 val은 남는 array 길이가 1이 아니면 idx가 0이 아닌 1,2,3.. 이렇게 나올거라 if문에 걸리지 않고
while문으로 반복하게 된다!!
enumerate 처음 사용해보고 무지로 인해 머릿속에서 꼬였던 거 같다ㅠㅠ
감사합니다♡