본문 바로가기
python/Code Kata

Code Kata_Day 1

by 2cong 2020. 4. 7.

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

'python > Code Kata' 카테고리의 다른 글

Code Kata_Day 2  (0) 2020.04.07

댓글