반응형

분류 전체보기 265

[LeetCode] Two Sum

Problem) Solution) 먼저 제 첫번째 솔루션 입니다. class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for idx, value in enumerate(nums): if (target - value) in nums: if nums.index(target - value) != idx: return [idx, nums.index(target - value)] 그보다 x20 빠른 솔루션 입니다. class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: d = {} for i, n in enumerate(nums): m = targ..

[Leetcode] Reverse String

Problem) 정말 간단한 문자열 뒤집기 문제 입니다. 문제의 핵심은 in-place로 추가 메모리를 사용하지 않고 해결하라는 조건입니다. Solution) class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ left, right = 0, len(s) - 1 while left < right: s[left], s[right] = s[right], s[left] left += 1 right -= 1 left와 right로 처음과 끝의 인덱스를 설정하고 서로 맞바꾸는 방법으로 문자열을 뒤집을 수 있습니다. * 추가적으로 python에서 제공하..

[Python] 슬라이싱(slicing) 기본

파이썬에서 슬라이싱(slicing)이란, 연속적인 객체(리스트, 튜플, 문자열)들에 대해서 특정 범위를 지정 선택해서 부분 객체들을 가져오는 기법을 의미합니다. 즉 연속적인 객체의 일부분을 복사해서 가져온다고 생각하면 됩니다. 기본 형태 만약 temp라는 리스트가 있고 다음과 같은 값을 갖고 있다고 할 때, 아래와 같은 형태로 슬라이싱 할 수 있습니다. temp = [1, 2, 3, 4, 5] # 슬라이싱 기본 형태 # temp[start:end:step] start : 시작 위치 end : 끝 위치 (포함 x) step : stride라고도 하며 몇개씩 가져올지 정할 수 있습니다. (옵션) 예제 temp[1:] # [2, 3, 4, 5] temp[:-1] # [1, 2, 3, 4] temp[2:4] #..

[Python] 문자열 활용법 정리

파이썬에서 문자열을 활용하는 다양한 방법들 중 자주 사용되는 방법들에 대해서 정리해보도록 하겠습니다 s = "Python is Easy" s.upper() # 대문자로 변경 # PYTHON IS EASY s.lower() # 소문자로 변경 # python is easy s.split() # 공백 기준 문자열 나누기 # ['Python', 'is', 'Easy'] s.upper() # 공백 포함 문자열 나누기 # ['Python is Easy'] s_1 = '123' s_2 = 'abc' s_3 = s_1 + s_2 s_1.isdigit(), s_2.isdigit() # 숫자로만 구성되어 있으면 True, 아니면 False # True False s_1.isalpha(), s_2.isalpha() # 문자..

[Leetcode] Valid Palindrome

Problem) 간단한 문자열 문제입니다. 코딩 문제로 문자열과 정규식 관련 문제를 은근히 자주 마주칠 수 있는데요. 이번 문제를 통해서 다시 한번 문자열 관련 다양한 처리 방법들에 대해서 정리해보면 좋을 것 같네요. Solution) # 문자열 활용 솔류션 class Solution: def isPalindrome(self, s: str) -> bool: strs = [] for char in s: if char.isalnum(): strs.append(char.lower()) while len(strs) > 1: if strs.pop(0) != strs.pop(): return False return True # 정규식 활용 솔류션 import re class Solution: def isPalind..

Docker 사용하기

Docker를 사용해보긴 했지만 아직 부족한 부분이 많다는 생각을 하고 있는데 때마침 Medium에서 좋은 정리글을 발견하여 이 시점을 계기로 더 전문적으로 Docker를 사용하기 위한 포스팅들을 할 예정입니다. 프로그래머에게 "environment"란 개념은 정말 중요하면서도 관리하기가 어려운 부분 중 하나입니다. 그 이유 중 하나는 코드에 사용되는 라이브러리가 지속적으로 업데이트 되고 그에 따라서 하나의 라이브러리 버전 업데이트가 코드에 영향을 끼치고 에러를 발생시킬 수 있기 때문입니다. 특히나 동시에 여러 프로젝트를 진행하고 있다면 이러한 문제들은 더욱 복잡해집니다. 또한, 개발한 코드를 다른 OS에서 동작하도록 하려면 코드를 전부 다 수정해야 할 수도 있습니다. 이러한 문제를 간단하게 만들어 주는..

[Leetcode] Container With Most Water

solution for Container With Most Water Problem) Solution) 2개의 포인터를 활용해서 시간 복잡도 O(n)에 끝낼 수 있다. max_water 변수에는 각 단계별 최대 물의 양을 저장한다. x, y 포인터 초기화하고 각각 x는 시작점, y는 끝점에 위치하고 하나씩 옮기며 최대 물의 양을 계산하고 max_water의 값과 비교하여 최종 최대 물의 양 값을 얻는다. 이때 포인터를 옮기는 과정에서 x, y 포인터가 가르키는 막대의 길이를 비교하여 길이가 짧은 막대의 포인터를 x는 +1, y는 -1로 한칸씩 옮겨야 한다. Example의 예를 들면 최초 x는 0 (height[0] = 1)을 가르키고 y는 8 (height[8] = 7)을 가르킨다. 여기서 물의 양을 ..

[Leetcode] Two City Scheduling

solution for Two City Scheduling Problem) Solution) 문제에서 각 cost간의 차이 값을 구했을 때, 차이 값이 작으면 A 도시로 차이값이 크면 B 도시로 가는 것이 비용상 더 효율적이다. 즉 문제에서 제공한 예제에 적용해서 4명의 각 비용의 차이 값을 계산하면 [-10, -170, 350, 10]이 되고 이를 오름차순으로 정렬하면 [-170, -10, 10, 350]이 된다. 여기서 우리는 정렬된 리스트를 기준으로 좌측에서 A로 우측에서 B로 한명씩 보내게되면 최소 비용으로 모든 사람들을 A, B 도시로 반반씩 보낼 수 있게 된다. 특별한 알고리즘에 대한 지식보다는 문제에 대한 이해와 해석 능력이 필요한 문제인 것 같다. class Solution: def two..

반응형