inflearn logo
강의

Course

Instructor

Coding Test Core for Beginners (Theory and Problem Solving) [Python]

[Problem 6] Sum of two numbers : O(n)

두수의합 Counter 사용

161

wannabeing

11 asked

0

안녕하세요

강사님 잘 보고 있습니다!!

아래와 같이 해도 괜찮을까요?

감사합니다~!

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

python 코딩-테스트

Answer 2

1

codingcamp

안녕하세요^^

위 코드로 하면 아래 인프런 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]를 답으로 해 같은 숫자를 두 번 사용하는 문제가 발생합니다.

 

 

0

wannabeing

감사합니다~!

1

communityai8509

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

Counter를 사용해서 두 수의 합 문제를 푸신 점 아주 좋습니다! 코드가 깔끔하네요. 😊 다만, Counter를 사용했을 때 같은 숫자가 두 번 문제에 포함되는 경우를 반드시 처리해야 합니다. 아래에 몇 가지 포인트를 추가적으로 고려해 보시면 좋을 것 같습니다.

  1. Counter로 카운트할 때의 부작용: 주어진 nums 리스트에서 동일한 숫자가 여러 번 등장할 경우, target-i와 동일한 숫자가 등장 횟수가 충분하지 않다는 가정하에 작동할 수 있습니다. 이를 해결하기 위해서는 target의 절반이 되는 숫자가 리스트에 두 번 이상인지 체크해야 합니다.

  2. 정렬 시 주의점: sorted(nums)를 사용하셨는데, sorting은 시간복잡도가 O(n log n)입니다. 이 부분은 문제의 요구사항에서 허용 가능한 시간복잡도에 따라 적절히 사용할 수 있습니다.

  3. 동일한 숫자 고려: 주어진 코드에서는 itarget-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 두수의 합(해시) 질문에서 해시테이블을 사용하여 두 수의 합 문제를 해결하는 방법과 유사한 논의를 확인해 보세요.

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

백준 서비스 종료인데 도전 과제 프로그래머스 문제로 올려주실수 있으신가요

0

59

1

도전과제 질문있습니다

0

69

2

안녕하세요 강사님 파이썬 커리큘럼 문의드립니다..

0

86

2

두수의합 sorting 질문

0

141

1

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

0

136

1

set을 활용한 중복제거

0

198

2

[문제 5번] 중복제거

0

150

1

최소값의 위치

0

139

1

백준 사용 시 채점 언어

0

174

1

백준 10546 배부른 마라토너

0

154

1

고정된 숫자 문제 질문

0

209

2

답은 맞는거같은데 틀렸어요

0

202

1

강의 커리큘럼 질문있습니다.

0

239

1

배열리스트 문제 5번 <중복 제거> 질문입니다.

0

275

1

체크배열을 set 으로 사용해도될까요?

0

248

1

연결리스트의 삽입과 삭제에서 시간복잡도.

0

352

1

내장 함수들의 시간복잡도는 외워둬야하나요?

0

236

1

중복 제거

0

340

1

카드 점수 정확성 테스트 경우의 수 문의

0

187

1

완강 후 후속 강의, 공부법 질문..

0

372

2

cnt = 1 과 nums.sort() 의 순서가 바뀌어야하지 않나요?

0

274

2

nums 조건오류인가요?

2

303

1

최솟값의 위치

0

244

2

강의 3-6 두수의 합(해시) 질문

0

310

1