
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 |
---|
댓글