-
[리트코드] (LeetCode) 1번 Two Sum 문제Problem Solving/LeetCode 2021. 6. 15. 13:53
일단 문제 내용은 간단하다.
정수로 이루어진 리스트와, 타겟 정수 하나를 함수 파라미터로 받고
리스트의 요소의 합으로 타겟이 되는 리스트의 인덱스 두개를 리스트로 리턴하면 된다.
ex) 파라미터 : list = [2,7,11,15] , target = 9
리스트의 0 => 2
리스트의 1 => 7
2 + 7 = 9
리턴 => [0,1]
방법은 다양하게 있을 것 같다.
브루트 포스 (Brute force) 형식으로 for 문을 두번 반복해서 모든 경우의 수를 더해보며 구할 수 있고..
아니면, 인덱스 번호를 하나씩 더하거나 하나씩 빼가며 인덱스를 추적하는 포인터 변수를 하나 만들어서 구할 수도 있을 것 같고..
근데 나는 브루트 포스 식으로 풀고 싶지 않았고, 좀 깔끔한 코드로 할 수 있지 않을까 고민하면서 푼 끝에
이런 코드로 문제를 풀었다.
class Solution: def twoSum(self, nums: list[int], target: int) -> list[int]: right = len(nums) - 1 while target - nums[right] not in nums: right -= 1 return [nums.index(target - nums[right]), right]
아마 코드를 보면 쉽게 이해할 수 있을텐데, 살짝 설명을 해보자면
변수 right는 처음 리스트의 가장 마지막 인덱스의 숫자를 가지면서 while 문을 돌면서 target - nums[right] 의 정수를 찾을 때 까지 점차 리스트의 왼쪽 요소를 가르키게 했다.
만약 target - nums[right] 의 조건에 맞는 정수를 찾으면
리스트의 index 함수를 사용해 (index() 함수는 만약 리스트의 같은 요소가 있으면 더 작은 인덱스 하나만 리턴한다.)
해당 정수의 인덱스와 right의 인덱스를 반환해줬다.
'Problem Solving > LeetCode' 카테고리의 다른 글
[리트코드] (LeetCode) 21번 Merge Two Sorted Lists 문제 (0) 2021.07.05 [리트코드] (LeetCode) 20번 Valid Parentheses 문제 (0) 2021.07.05 [리트코드] (LeetCode) 15번 3Sum 문제 (0) 2021.07.05 [리트코드] (LeetCode) 2번 Add Two Numbers 문제 (0) 2021.07.05 [리트코드] (LeetCode) 49번 Group Anagrams 문제 (0) 2021.06.14