파이썬 3번째로 큰 수 구하는 방법

조회수 2644회
def find_3rd max(L):
    L=[]
    m=L[0]
    for i in range(len(L)):
        if m>i:
            m=i
        L.pop(0)
        L.pop(1)
    return L[0] 

제가 리스트 L에다가 스플릿으로 정수들을 입력받고 그 중에서 하나씩 비교해서 제일 큰값을 왼쪽으로 정렬한 다음에 앞에 2개의 큰값을 삭제하고 3번쨰 큰값을 출력시켜주려하는데 여기서 이렇게 하면 나와야되는거 아닌가요? 왜 안나오죠?

1 답변

  • Q. 왜 안 나오죠?

    A. 이런 말씀 드리기 좀 유감스럽지만, 코드를 다시 읽어보시면, 이 코드는 처음부터 끝까지, 동작이 안 되는 코드라서 그렇습니다.

    def find_3rd max(L): # 함수명에 띄어쓰기가 있으면 안 되지 않을까요?
        L=[] # 함수의 1번 인자가 L로 넘어왔는데 왜 다시 빈 배열로 초기화하는 거지요?
        m=L[0] # L이 빈 배열인데 그럼 m에 할당할 L[0]은 뭘까요?
        for i in range(len(L)): # 결국 for i in 0 과 같은 것일 텐데... 그럼 이 루프는 한 번이라도 실행이 될까요?
            if m>i: # 이 연산은 정상 실행될까요? 여기서 m이 뭘까요?
                m=i # 의도하신 건 m을 기존 m보다 더 작은 m으로 만드는 작업인가요?
            L.pop(0) # 이 pop은 for 루프 안에서 매번 일어나야 하는 것인가요?
            L.pop(1) # 왜 한 번 더 pop하는 거지요?
        return L[0] # 이쯤되면 여기서 뭐가 나오는 게 더 신기할 거 같네요.
    

    Q. 하나씩 비교해서 제일 큰값을 왼쪽으로 정렬한 다음에 앞에 2개의 큰값을 삭제하고 3번쨰 큰값을 출력하면 되지 않나요?

    A. 글쎄요 너무 장황하게 풀고 계신 거 같은데? 정렬 알고리즘을 구현하셔야 하는 건가요? 사실 원하는 것만 얻자면 그건 좀 허무하게 간단하거든요.

    def getThirdBiggestInt(L) :
        L.sort()
        return L[0] if len(L) < 3 else L[-3]
    
    X = [19,227,-3,9987,386,20]
    print(getThirdBiggestInt(X)) # 227
    
    Y = [3,2]
    print(getThirdBiggestInt(Y)) # 2 (*목록 원소 갯수가 3개가 못되므로 제일 작은 수를 반환)
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)