• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

k번째 큰 수에서 반복문 관련 질문

20.08.18 23:13 작성 조회수 110

0

안녕하세요 얼마 전부터 강의를 듣기 시작했는데 모르는 것이 너무 많아 매일이 좌절의 연속입니다ㅠ

k번째 큰 수에서 코드가 선생님의 정답 코드와 다른 부분이 있는데 둘 다 맞는것인지 궁금해서 질문드립니다.

import sys
#sys.stdin=open("in1.txt", "rt")

N,K = map(int, input().split())
lst=list(map(int, input().split()))
sum_lst=set()

for i in range(N-2):
    for j in range(i+1, N-1):
        for k in range(j+1, N):
            sum_lst.add(lst[i]+lst[j]+lst[k])
sum_lst=list(sum_lst)
sum_lst.sort(reverse=True)
print(sum_lst[K-1])

 

위 코드 속 반복문에서 반복문의 범위를 저는 각각 N-2, N-1, N까지 반복하도록 했습니다.

반면 선생님의 코드에서는 모두 범위를 N까지 주셨는데 이렇게 놓으면 최종 루프에서는 N번째 값을 3번 더하게 되는것 아닌가요? 

제가 맞게 이해했는지 알려주시면 감사하겠습니다.

답변 4

·

답변을 작성해보세요.

0

정말 감사합니다! 확실히 이해가 되었습니다

0

 range(start, stop, step) 3개의 인자로 구성되며 step값만큼 증가감을 해 start에서 시작해 stop값 전까지 range객체를 미리 만들어 놓고 for 문에 대응되는 것입니다. 즉 start에서 stop로 step값만큼 증가감을 할 수 없으면 그냥 빈 객체가 생성되고 for문은 반복하지 않습니다. range(10, 9) 와 같이 하면 빈객체가 생성됩니다. step값이 생략되면 기본값으로 1입니다.

print(list(range(10, 9))) 를 출력하면 빈리스트가 출력됩니다.

0

답변 감사합니다! 추가 질문인데 i값이 n번째를 가리키면 j는 n+1을 가리켜야 해서 인덱싱 에러? 가 일어나야 되는거 아닌가 생각했는데 그게 아닌가보네요.. 제가 반복문을 제대로 이해하지 못하고 있는걸까요?

0

안녕하세요^^

i값이 마지막 n번째를 가르킨다면 그 안쪽 for문인 j가 n번째를 가르킬 수 있을 까요? 

위에 님코드 처럼 하는게 제일 좋습니다. 하지만 영상처럼 한다고 해서 i, j, k가 모두 n번째를 인덱싱하는 일은 없습니다.