Algorithm 1

Jina·2020년 4월 6일
0

1. while을 사용하여 만들기

def two_sum(nums, target):
    i=0
    n=1
    while i<len(nums):
        while n<=len(nums)-1:
            expect=nums[i]+nums[n]
            if target == expect :
                return [i, n]
            else :
                n=n+1
        i=i+1
        n=i+1

풀이방식

리스트 [0,1] --> [0,2] --> [0,n] 확인 후 target이 없으면
리스트 [1,2] --> [1,3] --> [1,n] 이런식으로 앞에서부터 순차적으로 짝을 만들어서 확인하는 코드를 만들고 싶었음

따라서 처음 i는 고정해두고 n을 하나씩 늘리며 확인하기
이 때 n을 다 끝나도 반환하지 않으면 i를 하나 늘리기

내가 오래걸린 부분

1. n=i+1
이렇게 해주지 않으면 n이 마지막 index 번호에서 고정이 돼서 모든 조합을 찾을 수 없음
n=i+1을 해준 이유는 i 바로 뒷번호부터 짝을 지으면 되기 때문에

2. while n<=len(nums)-1:
처음에는 while n<len(nums)-1로 했었는데 이 경우 리스트가 두개밖에 없으면 불가능 ( ex [1,2] )

이유: 여기서 len(nums) = 2이고 두번째 숫자의 index = 1
while n<2-1은 while n<1 따라서 while문 안으로 들어갈 수 없음
while n<=1로 해야지 while문을 제대로 사용할 수 있음

2. 중첩 for문 이용

def two_sum(nums, target):
    for i in nums:
        for j in nums:
            if i==j :
                pass
            else:
                if i+j == target:
                    res = [nums.index(i),nums.index(j)]
                    return res

풀이방식

nums 리스트의 숫자들 마다 i, j로 반복
만약 리스트가 nums=[1,3,5,7,9] 면
i = 1, j = 1 / i = 1, j = 3 / i = 1, j = 5 / ‥‥ 와 같이 반복하고 계산하기
만약 i == j 면 지나가도록 설정

그 이후 i + j의 값이 target이면 출력하도록하는데 i와 j를 그대로 출력하면 list index 번호와 i,j 가 다르기 때문에 index( ) 메소드를 이용하여 출력하도록 함

3. for문 in 사용

3-1

def two_sum(nums, target):
	index_map = {}
	for i in range(len(nums)):
		num = nums[i]
		pair = target - num
		if pair in index_map:
			return [index_map[pair], i]
		index_map[num] = i
	return None

풀이방식

비어있는 딕셔너리 만들기 (index_map)
nums 리스트의 길이 범위를 i로 지정하고 num이라는 변수를 만듬

만약 len(nums) = 4면 range(len(nums)) = (0,4)
따라서 num=nums[0]부터 num=nums[3]까지 반복

target과 num을 뺀 값을 pair로 지정해둠
그 이후 딕셔너리에 num(nums 리스트의 요소 값)을 key로 i(nums 리스트의 index값)를 value로 지정

만약 pair가 딕셔너리 안에 있으면 그 값을 return함

3-2

def two_sum(nums, target):
	a=[]
    for i in nums:
        if target -i in nums :
            a.append(nums.index(i))
            a.append(nums.index(target-i))
            return a

풀이방식

비어있는 리스트를 만들기 (a)
nums를 i로 지정하여 target과 빼도록 시킴
이때 뺀 값이 nums 리스트에 있으면 리스트에 포함시키기
리스트에 포함시킬때는 i와 뺀 값을 리스트 index( ) 사용하여 nums에서 찾고 index 숫자로 포함시키기

뺀 값이 nums 리스트에 없다면 nums의 i를 바꿔서 다시 반복하도록


문제 출처는 wecode!

0개의 댓글