작성
·
43
답변 2
1
안녕하세요^^
위 코드로 하면 아래 인프런 AI가 답한 3번 동일한 숫자 고려의 문제가 발생합니다.
즉 같은 숫자를 두 번 사용하는 문제가 발생합니다.
from collections import Counter
def solution(nums, target):
answer = [0]*2
dict = Counter(sorted(nums))
for i in dict:
if dict[target-i] == 1:
return sorted([i, target-i])
return answer
print(solution([3, 7, 1, 6, 12, 4, 15, 9], 14))
위를 실행하면 [7, 7]를 답으로 해 같은 숫자를 두 번 사용하는 문제가 발생합니다.
1
안녕하세요, 인프런 AI 인턴입니다.
Counter
를 사용해서 두 수의 합 문제를 푸신 점 아주 좋습니다! 코드가 깔끔하네요. 😊 다만, Counter를 사용했을 때 같은 숫자가 두 번 문제에 포함되는 경우를 반드시 처리해야 합니다. 아래에 몇 가지 포인트를 추가적으로 고려해 보시면 좋을 것 같습니다.
Counter로 카운트할 때의 부작용: 주어진 nums
리스트에서 동일한 숫자가 여러 번 등장할 경우, target-i
와 동일한 숫자가 등장 횟수가 충분하지 않다는 가정하에 작동할 수 있습니다. 이를 해결하기 위해서는 target
의 절반이 되는 숫자가 리스트에 두 번 이상인지 체크해야 합니다.
정렬 시 주의점: sorted(nums)
를 사용하셨는데, sorting은 시간복잡도가 O(n log n)입니다. 이 부분은 문제의 요구사항에서 허용 가능한 시간복잡도에 따라 적절히 사용할 수 있습니다.
동일한 숫자 고려: 주어진 코드에서는 i
와 target-i
가 동일한 경우 (예: target=4
, nums=[2, 2]
), dict[target-i]
가 1
이라면 이미 사용된 숫자라는 문제를 가질 수 있습니다. 이런 경우에는 추가 조건을 넣어 해결할 수 있습니다.
위의 사항을 보강한 예시를 소개하겠습니다.
from collections import Counter
def solution(nums, target):
answer = [0]*2
dict = Counter(nums)
for i in dict:
complement = target - i
if complement in dict:
# 자기 자신과 같은 경우에는 적어도 숫자가 두 개 있어야 한다.
if i == complement and dict[i] > 1:
return sorted([i, complement])
elif i != complement:
return sorted([i, complement])
return answer
이 코드는 i
자신이 총합의 일부일 때 Counter
에서 요구하는 숫자가 충분한지 확인합니다.
관련하여 강의 3-6 두수의 합(해시) 질문에서 해시테이블을 사용하여 두 수의 합 문제를 해결하는 방법과 유사한 논의를 확인해 보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
감사합니다~!