코테 공부/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 처음 사용해보고 무지로 인해 머릿속에서 꼬였던 거 같다ㅠㅠ

감사합니다♡