파이썬 def 메서드 정의할 때 ->가 헷갈림. 브루트 포스로 인덱스 반환 계산하기.

2023. 8. 2. 15:32python

반응형
from typing import List

def twoSum(nums: List[int], target: int) -> List[int]:
    for n in range(len(nums)):
        for n2 in range(n+1, len(nums)):
            if nums[n] + nums[n2] == target:
                return List[n, n2]

print(twoSum([7,11,15, 2], 9))

이거 위에 있는 것 틀린 코드다. 실행하면 에러남.

리스트 형 반환하는게 헷갈린다. List로 반환하면 오류가 난다.

return [n, n2] 로 해야 한다.

 

from typing import List

def twoSum(nums: List[int], target: int) -> List[int]:
    num_dict = {}
    for i, num in enumerate(nums):
        if num in num_dict:
            return [num_dict[num], i]
        else:
            num_dict[target - num] = i

print(twoSum([2,3,6,15], 9))

다음은 제일 처음 썼던 코드와 목적은 같은데, in 을 이용한 것. 

nums 리스트의 모든 요소를 순회하는 반복문을 실행

각 숫자가 num_dict에 존재하는지 확인.

 - 만약 숫자가 num_dict에 존재한다면, 그 숫자와 현재 숫자가 타겟을 더하는 두 요소라는 뜻.

이 경우, num_dict에서 저장해 두었던 그 숫자의 인덱스와 현재 숫자의 인덱스를 반환한다.

 - 만약 숫자가 num_dict에 존재하지 않는다면, 타겟에서 현재 숫자를 뺀 결과를 키로, 현재 숫자의 인덱스를 값으로 num_dict에 저장한다. 

 

위의 숫자에서 [2,3,6,15] 이라는 리스트와 9라는 타겟이 주어졌다. 2가 들어오면 num_dict에 {7:0}을 추가한다.

(9 - 2 = 7 이고 2의 인덱스는 0)

그 다음 3를 확인하고 num_dict에 {6:1}을 추가.(9 - 3 = 6 )

그 다음 6을 확인하면, num_dict에서 6을 키로 가지는 항목을 발견하게 된다. 그래서 1 (3의 인덱스)과 2 (6의 인덱스)를 반환한다. 3+6=9 라는 것이 성립된다는 의미.

 

어려움.. 선인들은 이런걸 어떻게 생각했지!?

 

 

728x90