작성
·
15
0
강사님
밑에 코드로 작성해도 괜찮은가요!?
잘보고있습니당!!
def solution(nums, target):
answer = [0]*2
nums.sort()
n = len(nums)
left = 0
right = n-1
sumV = nums[left] + nums[right]
for _ in range(n):
if sumV == target:
answer = [nums[left], nums[right]]
break
elif sumV > target:
right -= 1
sumV = nums[left] + nums[right]
elif sumV < target:
left += 1
sumV = nums[left] + nums[right]
return answer
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
두 수의 합 문제를 해결하기 위해 투 포인터 접근 방식을 사용하셨네요. 이 방법은 정렬된 배열을 다루며 시간 복잡도를 O(n)으로 유지할 수 있어 효율적입니다. 주요 포인트를 아래에 정리해 드리겠습니다.
nums.sort()
를 통해 배열을 정렬하셨습니다. 이는 O(n log n)의 복잡도를 가지나, 이후 투 포인터 알고리즘을 사용할 수 있도록 준비하는 과정입니다.left
와 right
라는 포인터를 각각 배열의 시작과 끝에 배치합니다. 현재 포인터들의 합을 sumV
로 계산하며, 목표 값인 target
과 비교합니다.sumV
가 target
과 같으면 정답 리스트에 현재 left와 right 포인터 위치의 값을 저장하고 종료합니다.sumV
가 target
보다 크다면 right
포인터를 왼쪽으로 이동시켜 합을 줄입니다.sumV
가 target
보다 작다면 left
포인터를 오른쪽으로 이동시켜 합을 키웁니다.sumV
를 재계산하는 위치를 조정하면 루프 바깥에서도 사용할 수 있어 이해가 더 쉬울 수 있습니다.left
또는 right
포인터가 배열을 초과하지 않도록 루프 조건을 설정하는 것도 필요합니다.관련하여 두 수의 합 O(n) 문제에 관한 질문입니다는 다른 방식의 해결법과 비교하며 시간 복잡도에 대한 논의가 이루어진 게시물입니다. 도움이 되실 것이라 생각합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.