본문 바로가기

Leetcode

(32)
Leetcode 876. Middle of the Linked List 주말 잘 쉬고 리트코드 하러 왔슴당. 오늘 리트코드는 Linked List를 이용하는 것이었다! 옛날에 리트코드 처음 했을 때 파이썬으로 linked list 문제 푸는 데 애를 먹었던 기억이 생생하다. C로 linked list를 배운 나는 파이썬의 자료구조가 어색했다. 여튼! 오늘 문제는 linked list의 중간 원소를 찾아 그 원소로 시작하는 부분을 답하는 것이다. # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def middleNode(self, head: Optional[List..
Leetcode 557. Reverse Words in a String III 오늘의 문제는 String을 뒤집는 것인데, 단어들 (공백기준) 사이에는 순서를 유지하는 것이다. class Solution: def reverseWords(self, s: str) -> str: answer = "" s = s.split(' ') for word in s: answer += word[::-1] answer += " " return answer[:-1] for문에서 마지막 word에서, answer에 공백이 하나 더 들어가게 된다. 이를 처리해주기 위해 return 문에서 [:-1]로 공백을 제외한 나머지 문자열을 return하게 한다. 사실 처음에 마지막 space에 대한 생각을 해주지 않아 Wrong Answer을 받았다...흑 그래도 금방 코드가 뚝딱뚝딱 짜져서 (?) 기분이 좋다!..
Leetcode 167. Two Sum II - Input array is sorted 요즘 리트코드의 원샷원킬에 재미가 들렸다. 물론 난이도가 Easy라서 가능한거지만^^ 오늘 문제도 무난했다. 두개의 포인터를 써서 Binary search와 같은방법으로 접근했더니,,, Test case 돌리기도 전에 잘못 눌러서 Submit했는데 Accept되었다. 기분이 좋다 힛 class Solution: def twoSum(self, numbers: List[int], target: int) -> List[int]: # Two pointers n = len(numbers) low = 0 high = n - 1 while low target: high -= 1 else: # sums == target return [low + 1, high + 1] return [low + 1, high + 1] 문..
Leetcode 283. Move Zeroes 오늘은 이미 깃커밋 했지만,,, 리트코드의 의리를 저버리지 않기 위해서 (?) 했다. 난이도는 Easy라서 진짜 Easy하다. class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ for num in nums: if num == 0: nums.remove(num) nums.append(0) in-place로 해야한다길래 파이썬의 좋은 기능이라고 할 수 있는 remove, append를 사용하였다. 코드는 보는 바와 같이 간단하다. Time Complexity : O(n) Success!했는데... 하위 95%란 말이잖아 엉엉 그래서 py..
Leetcode 189. Rotate Array 오늘 코드. 매우 간결하다! class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ n = len(nums) k = k % n nums[:] = nums[n-k:] + nums[:n-k] In-place로 작성해야하므로 nums에 넣어주었다. in-place는 메모리를 더 사용하지 않고, 이미 주어진 메모리 안에서 문제를 해결해나가는 방식이라고 할 수 있다. 여기서 주의할 점은 두개이다. 1. k = k % n : 이 경우, 처음에는 Wrong answer이 나왔다. 알고보니 nums의 길이는 3인데 k는 5인 경우가 있더라... ..
Leetcode 977. Squares of a Sorted Array - Two Pointers 오늘도 어김없이 리트코드! 오늘은 Two Pointers 문제에 대하여 다루어보았다. Two Pointers 주제에 있길래 원하시는대로 Two Pointers를 설정하였다. class Solution: def sortedSquares(self, nums: List[int]) -> List[int]: n = len(nums) answer = [0] * n # Two pointers low = 0 high = n - 1 for i in range(n - 1, -1, -1): # 반대로 순회하면서 비교 if abs(nums[low]) > abs(nums[high]): answer[i] = nums[low] * nums[low] low += 1 else: answer[i] = nums[high] * nums[h..
Leetcode 35. Search Insert Position - Binary Search 이 문제도 이진탐색을 이용하면 쉽게! 해결된다. 3분컷 class Solution: def searchInsert(self, nums: List[int], target: int) -> int: # Binary Search low = 0 high = len(nums) - 1 while low target: high = mid - 1 return low 성공이다. 오늘도 한 개 했다. 뿌듯
Leetcode 278. First Bad Version - Binary Search Tree # The isBadVersion API is already defined for you. # @param version, an integer # @return an integer # def isBadVersion(version): class Solution: def firstBadVersion(self, n): """ :type n: int :rtype: int """ low = 1 high = n while (low true high = mid - 1 else: low = mid + 1 return low 10/2, 평소 코딩 연습을 하던 Leetcode에서, 매일 푸는 문제에서 이용되는 자료구조/알고리즘 이론을 기록하기로. Number : 278 Problem : First Bad Version L..