강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của parksangil998751
parksangil998751

câu hỏi đã được viết

Lõi kiểm tra mã hóa cho người mới bắt đầu (lý thuyết và giải quyết vấn đề) [Python]

[Bài 3] Tổng của hai số : O(nlogn) --- two pointers

[문제3번] 두수의 합 : O(nlogn)

Viết

·

124

0

제가 작성한 코드도 O(nlogn)에 충족하는지 궁금합니다 감사합니다

def solution(nums, target):
    answer = [0]*2
    length = len(nums)
    nums = sorted(nums)
    left = 0
    right = length-1

    for i in range(length):
        if target > (nums[left] + nums[right]):
            left += 1
        if target < (nums[left] + nums[right]):
            right -= 1
        if target == (nums[left] + nums[right]):
            answer = [nums[left], nums[right]]

    return answer
python코딩-테스트

Câu trả lời 1

0

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

두 수의 합 문제에서 O(nlogn)의 시간 복잡도를 가지고 있는지 확인하고 싶으시군요.

우선, 정렬을 사용하는 부분에서 시간 복잡도는 O(nlogn)입니다. 그 다음, 투 포인터 접근 방식으로 두 수의 합을 찾는 부분은 O(n) 시간 복잡도를 가집니다. 따라서 전체 코드의 시간 복잡도는 O(nlogn) + O(n)으로, 최종적으로 O(nlogn)에 해당합니다.

하지만, 코드에서 약간의 수정이 필요합니다. 현재 for 루프 내에서 모든 경우를 확인하지 않고, 필요한 경우에만 인덱스를 조정하는 방식으로 충분합니다. 다만, target을 찾았을 때 루프를 종료하도록 수정할 필요가 있어 보입니다.

다음은 최적화된 코드입니다:

def solution(nums, target):
    answer = [0]*2
    nums = sorted(nums)
    left = 0
    right = len(nums) - 1

    while left < right:
        current_sum = nums[left] + nums[right]
        if current_sum == target:
            answer = [nums[left], nums[right]]
            break
        elif current_sum < target:
            left += 1
        else:
            right -= 1

    return answer

관련하여 유사한 질문 및 답변들은 다음 링크들을 참고해주세요:

  1. 강의 3-6 두수의 합(해시) 질문
  2. 이렇게 풀어도 돼나요?
  3. 두수의 차 문제

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

Hình ảnh hồ sơ của parksangil998751
parksangil998751

câu hỏi đã được viết

Đặt câu hỏi