To Be Developer

[LeetCode] Two Sum ll - Input array is sorted 본문

알고리즘/LeetCode

[LeetCode] Two Sum ll - Input array is sorted

Jeff Hwang 2019. 3. 5. 15:12








class Solution(object):
    def twoSum(self, nums, target):
        """
        :type numbers: List[int]
        :type target: int
        :rtype: List[int]
        """
        # 문제설명
        # 오름차순으로 정렬된 배열이 있다
        # numbers의 원소 2개를 중복되지 않게 골라 더한 값이
        # target 일 때 원소의 index를 list로 return 하라
        # 단, index는 1부터 시작한다.
        
        '''
        초기 접근법
        단순하게 2중 for 문을 돌리면 될 것이라 생각을 하였다.
        '''
        '''

        ln = len(nums)
        for i in range(ln-1):
            for j in range(i+1, ln):
                if nums[i]+nums[j] == target:
                    return [i+1, j+1]
        '''

        # 하지만 run time limit 에 걸리게 된다.
        # 별의 별 생각을 다하고 이것 저것 다 해보아도 안되어
        # Discuss 에서 다른 사람이 작성한 코드를 보고 새로운 사고 방식을 보았다.

        

        # nums 의 배열의 길이를 저장
        ln = len(nums)
        
        # 배열의 left index
        left = 0
        # 배열의 right index
        right = ln - 1
        
        # left index 가 right 보다 작을 때 까지 while문을 돌린다.
        while left < right:
            # nums[left] +nums[right] 가 target 보다 크면
            # right index를 하나 감소시킨다.
            if nums[left] + nums[right] > target:
                right -= 1
            # nums[left] + nums[right] < target 보다 작으면
            # left index 를 증가시킨다.
            elif nums[left] + nums[right] < target:
                left += 1
            # 만약 nums[left] + nums[right] 가 target 가 일치한다면
            # index+1 씩해서 return 한다.
            elif nums[left] + nums[right] == target:
                return [left + 1, right + 1]
                
        return [left + 1, right + 1]

        
if __name__ == '__main__':
    numbers = [2, 7, 11, 15]
    target = 9

    sl = Solution().twoSum(numbers, target)
    print(sl)

'알고리즘 > LeetCode' 카테고리의 다른 글

[LeetCode] 189. Rotate Array.py  (0) 2019.03.08
[LeetCode] 7. Reverse Integer  (0) 2019.03.06
[LeetCode] 566. Reshape the Matrix  (0) 2019.03.04
[LeetCode] 349. InterSection of Two Arrays  (0) 2019.03.03
[LeetCode] 136. Single Number  (0) 2019.03.02