목차
두 수의 합
정수 수열 안에서 수열의 원소 두 개의 합이 target값이 되는 경우를 찾고 싶습니다.
매개변수 nums에 길이가 n인 수열이 주어지고, 매개변수 target에 자연수 값이 주어지면
이 수열안에서 두 개의 원소의 합이 정수 target값이 되는 두 원소를 구해 배열에 오름차순으로 담아 반환합니다.
두 개의 원소의 합이 target값이 되는 경우는 오직 한가지 뿐인 입력만 주어집니다. 한 원소를 두 번 더하는 것은 안됩니다.
nums의 각 원소는 유일값입니다.
답이 없을 경우 [0, 0]을 반환합니다.
제한사항:
• nums의 길이 3 <= n <= 200,000
• 배열 nums의 원소는 정수입니다. -10,000 <= nums[i] <= 10,000 • -20,000 <= target <= 20,000
나의코드
from collections import defaultdict
def solution(nums, target):
answer = [0]*2
dic=defaultdict()
for x in nums:
if x in dic:
answer[0]=x
answer[1]=target-x
else:
dic[target-x]=1
answer.sort()
return answer
print(solution([ 7,3, 2, 13, 9, 15, 8,11], 12))
print(solution([21, 12, 30, 15, 6, 2, 9, 19, 14], 24))
print(solution([12, 18, 5, 8, 21, 27, 22, 25, 16, 2], 28))
print(solution([11, 17, 6, 8, 21, 9, 19, 12, 25, 16, 2], 26))
print(solution([7, 5, 12, -9, -12, 22, -30, -35, -21], -14))
print(solution([7, 5, 12, 20], 15))
오.. 해시를 배우니 반복문 하나로 해당 출력값을 구할수 있다..!
해시가 저장소(?) 같은 역활을 해서 그렇다.
정답코드
from collections import defaultdict
def solution(nums, target):
answer = [0]*2
nH = defaultdict(int)
for x in nums:
y = target - x
if y in nH:
return sorted([x, y])
nH[x] = 1
return answer
print(solution([3, 7, 2, 12, 9, 15, 8], 12))
print(solution([21, 12, 30, 15, 6, 2, 9, 19, 14], 24))
print(solution([12, 18, 5, 8, 21, 27, 22, 25, 16, 2], 28))
print(solution([11, 17, 6, 8, 21, 9, 19, 12, 25, 16, 2], 26))
print(solution([7, 5, 12, -9, -12, 22, -30, -35, -21], -14))
print(solution([7, 5, 12, 20], 15))
'코딩테스트[파이썬] > 입문자를 위한 코딩테스트 핵심' 카테고리의 다른 글
[시물레이션] -청소로봇 1 (0) | 2024.01.22 |
---|---|
[시물레이션] -웅덩이 (0) | 2024.01.22 |
[해시] - 팰린드롬의 길이 (0) | 2024.01.22 |
[해시] -팰린드롬 확인 (0) | 2024.01.22 |
[해시] -자기분열수 (0) | 2024.01.22 |