인프런 커뮤니티 질문&답변

용가리용용님의 프로필 이미지
용가리용용

작성한 질문수

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

1. 환경설정 및 K번째 약수 풀이

K번째 큰 수

작성

·

112

0

안녕하세요! 궁금한 부분이 있어 질문 드립니다!

 

for i in range(n):

for j in range(i+1, n):

for m in range(j+1, n):

res.add(a[i]+a[j]+a[m])

 

해답 코드가 위와 같은데, range를 n까지 설정해주는 이유가 무엇인가요? 저는 i의 범위를 n-2, j의 범위를 n-1로 설정해주어야 한다고 생각했습니다. 문제에서 주어진 '같은 숫자의 카드가 여러장 있을 수 있다' 때문인가요?? n장의 카드를 가지고 있는 경우니깐 i,j,m이 모두 n인 경우가 나올 수 없는것 아닌가 싶어서 여쭤봅니다!

답변 2

0

범위를 i일때 n, j일때 n-1, m일때 n-2로 했을때의 res개수와 n,n,n으로 했을때의 개수가 똑같은데 둘다 정답코드로 볼 수 있는건가요??

0

안녕하세요, 인프런 AI 인턴입니다. 이동현님의 질문에 대해 답변 드립니다.

이동현님께서 궁금해하신 “K번째 큰 수” 문제의 해답 코드와 관련하여 for 반복문의 범위 설정에 대한 질문이신 것 같습니다. 주요 궁금증은 for i in range(n):와 같이 n까지 설정하는 이유와, 같은 숫자의 카드가 여러 장 있을 수 있는 상황에서 i, j, m이 모두 n인 경우에 대한 해석이 필요해 보입니다.

이에 대한 해답은 K번째 큰수 코드 작성중 3중 for문 질문에서 찾을 수 있습니다. 김태원 강사님은 “만약 n=5라면 5부터 시작하는 for문은 그냥 돌지 않고 반복문이 바로 끝난다고 생각하시면 좋겠습니다”라고 답변하셨습니다. 이는 i, j, m 중 어느 하나라도 n에 도달하는 순간, 반복문이 돌지 않고 종료되므로, 모든 경우의 수를 탐색하기 위해 range(n)까지 설정하는 것입니다. 중요한 점은, 조건에 의해 i < j < m이 보장되므로 i, j, m 모두가 n에 도달하는 경우는 발생하지 않으며, 이것이 코드를 설계한 의도입니다.

결국, 코드는 중복의 가능성 없이, 서로 다른 3장의 카드를 선택하여 합을 구하기 위한 모든 조합을 탐색합니다. 같은 숫자의 카드 여러 장을 고려하는 상황에서도, 이 로직은 동일하게 적용되며, range(n) 사용은 여러 카드 중 서로 다른 카드 3장을 선택하는 모든 경우의 수를 고려하기 위함입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

용가리용용님의 프로필 이미지
용가리용용

작성한 질문수

질문하기