CK week 1 day1

BnDC·2021년 9월 13일
0

code Kata

목록 보기
1/22

🎈 문제

배열 nums, 정수 target을 입력 받아 nums의
서로 다른 두 원소를 합하여 target이 되게 하는
두 원소의 index를 리스트로 반환하라.
(단, 합이 되게 하는 Index 조합은 1쌍만 존재한다.)

# ex) nums= [4, 9, 11, 14] target=13 일 때, [0,1]을 반환




🎯 내 풀이

def two_sum(nums, target):
    # 아래 코드를 작성해주세요.
    for i in range(len(nums)-1):
      for j in range(1,len(nums)):
        if nums[i]+nums[j]==target:
    		return result




🎯 짝 풀이


def two_sum(nums, target):
    # 아래 코드를 작성해주세요.
    for i in range(len(nums)):
      for j in range(i,len(nums)):
    return [i, j]




🔍 내 풀이의 문제점

중첩 for문에서, j가 1부터 시작하므로, 앞선 for문에서
비교한 index쌍이 중복됨으로 비효율적이다!

예를 들어
(i, j)=(1,2) 일때, nums[i]=9 nums[j]=11
(i, j)=(2,1) 일때, nums[i]=11 nums[j]=9 임으로
같은 조합의 쌍을 반복적으로 검사함으로 비효율적이다.




🧵 풀이 개선

이 문제의 경우 nums에 서로 다른 두 원소의 합이 target이
되게 하는 두 원소의 index를 반환하는 문제임으로 i,j가 같아질 경우
같은 원소를 더해서 target이 되는 경우가 내 풀이, 짝 풀이에서 모두
걸러지지 않는다.

ex) nums = [1, 2, 6, 8, 4] target=12

def two_sum(nums, target):
    # 아래 코드를 작성해주세요.
    for i in range(len(nums)-1):
      for j in range(i+1,len(nums)):
    return [i, j]
profile
“Life is C (Choice) between B (Birth) and D (Death).” - 인생은 B와 D사이의 C

0개의 댓글