파이썬 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개가 못되므로 제일 작은 수를 반환)
댓글 입력