인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

성공하자님의 프로필 이미지
성공하자

작성한 질문수

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

lt, rt 관련

작성

·

63

0

안녕하세요 선생님, 수업 잘 듣고있습니다 ㅎㅎ

다름이 아니라, 섹션 3의 5.수들의 합 문제에서 궁금한 점이 있습니다

import sys

sys.stdin = open("input.txt", 'r')

n, m=map(int, input().split())

a=list(map(int, input().split()))

lt=0

rt=1

tot=a[0]

cnt=0

while True:

if tot<m:

if rt<n:

tot+=a[rt]

rt+=1

else:

break

elif tot==m:

cnt+=1

tot-=a[lt]

lt+=1

else:

tot-=a[lt]

lt+=1

print(cnt)

 

이 코드에서, 여기서 만약 rt가 맨끝까지 가서 n에갔지만 / lt는 n 이전까지도 못왔다면(예를 들면 lt는 3인데 rt는 n인 경우) 이건 논리에 어긋나지 않나 궁금해서 질문드렷습니다.

 

항상 좋은강의 감사합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

성공하자님의 질문은 ‘수들의 합’ 문제에서 ltrt 포인터의 동작 방식과 논리적 일관성에 대한 질문으로 이해됩니다. 이 문제는 특정 조건을 만족하는 부분 배열의 개수를 찾는 문제로, 투 포인터 방식을 이용하여 해결할 수 있습니다. 여러분이 질문하신 내용은 ltrt보다 항상 작거나 같아야 하는 이유와, rt가 배열의 끝에 도달했을 때 lt의 처리 방법에 대한 궁금증으로 보여집니다.

먼저, 유사한 문제 해결 방법을 제시하는 기존의 답변을 여기 상세하게 설명하겠습니다.

비슷한 while 문 코드 질문입니다! 게시글에서 질문자는 ‘수들의 합’에 대한 코드를 공유하고, 예상치 못한 결과에 대해 문의하였습니다. 이 문제의 주된 관심사는 ltrt 인덱스의 움직임을 통해 목표 합(m)을 찾는 것입니다. 문제 해결의 핵심은 ltrt를 적절히 이동시키며 부분 배열의 합을 조건에 맞게 탐색하는 것입니다.

문제에 대한 답변에서는, rt 인덱스가 배열의 끝에 도달한 경우에도 lt 인덱스를 이용하여 남은 부분 배열을 계속 검사해야 한다는 점을 강조합니다. 즉, rt가 배열의 끝에 도달해도 lt를 이동시키며 조건을 만족하는지 계속 확인해야 합니다. 이 과정에서 부분 배열의 합이 목표 합 m과 같은 경우 카운트를 증가시키고, lt를 증가시켜 다음 가능성 있는 부분 배열을 찾습니다.

교훈은, ltrt 포인터 사용의 논리는 배열 내에서 가능한 모든 부분 배열을 효율적으로 검사하여, 주어진 조건(예: 합이 m과 같은)을 만족하는 부분 배열을 찾는 데 있습니다. 따라서 ltrt보다 작거나 같은 위치에 있을 때까지 부분 배열을 계속 검사해야 하며, 이는 논리적으로 어긋나지 않습니다.

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

성공하자님의 프로필 이미지
성공하자

작성한 질문수

질문하기