728x90
https://leetcode.com/problems/3sum/
제출코드)
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
answer = []
nums.sort()
if len(nums) <= 1 or not nums:
return []
for k, val in enumerate(nums[:-2]):
i = k + 1
j = len(nums)-1
while i < j :
i_num, j_num = nums[i], nums[j]
total = i_num + j_num + val
if total == 0:
if [i_num,j_num,val] not in answer:
answer.append([i_num,j_num,val])
i += 1
j -= 1
elif total > 0:
j -= 1
elif total < -val:
i += 1
return answer
이전에 Leetcode 1번 twoSum 문제를 통해 유사한 풀이를 해봤음에도 계속 에러가 나서 시간이 한참 걸렸다....
그래서 이 문제에서 간과했던 실수를 정리해보려 합니다
- [ ] 가 나오는 예외케이스 처리 (nums가 비어있거나 길이가 1개 이하일 경우)
- two pointer처리를 위해서는 sort 처리가 선행되어야 한다
- 3개 변수가 주어졌기 때문에 시작점을 0, 끝점을 -1로 무조건 잡을게 아니라,
-> for 문으로 하나의 변수가 이미 i으로 시작
-> 다른 변수는 i+1처리로 서로 겹치지 않도록 처리
-> 나머지 하나는 기존 two pointer 처리 처럼 끝점에서 시작 - k가 len(nums)의 자리까지 가게 되면 계산 중복이 발생하기 때문에 [:-2]처리를 통해 중복 방지
- total = i_num + j_num+val을 미리 계산하고 if -elif문에 사용
→ IF 문에 매번 계산을 실행하면 TIME ERROR 발생 - if 문에 첫번째에 i += 1, j -=1을 넣지 않으면 i와 j가 계속 제자리 걸음을 하기 때문에 변수 값을 변경처리 해줘야 함
코드를 실수 없이 짜기 위해서는 정말 많은 연습이 필요한 것 같습니다... ㅜㅠ
728x90
반응형
'‼ ERROR RECORD' 카테고리의 다른 글
Leetcode 207. Course Schedule 풀이 (Topological Sorting, BFS, DFS) (1) | 2022.09.23 |
---|---|
Leetcode 102. Binary Tree Level Order Traversal (BFS) (0) | 2022.09.22 |
Leetcode 973. K Closest Points to Origin (Heaqp 등) (1) | 2022.09.21 |
Leetcode 542. 01 Matrix (1) | 2022.09.20 |
Leetcode 53.Maximum Subarray(Kadane, brute-force algorithm) (0) | 2022.09.20 |
댓글