
리트코드(LeetCode) 1번 두 수의 합(Two Sum)
2021. 9. 17. 16:34
Algorithm
📌 풀이 1 : 브루트 포스 하나하나 다 때려 박아 비교하는 브루트 포스 방법이나 매우 널리 알려진 방법이나 시간이 매우 오래 걸린다. 리트코드 기준 4836 ms의 시간이 걸렸다. class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)): for j in range(i+1, len(nums)): if nums[i] + nums[j] == target: return [i, j] 2중 for문으로 하나하나 비교하여 target과 같아지는 순간 인덱스들을 출력하면 된다. 📌 풀이 2 : 파이썬 내장 함수 in 사용 파이썬 내장함수 in을 사용하는 방법이다. 파이썬의 in함수는 시간 ..

백준 알고리즘 파이썬(Python) 1764번 듣보잡
2021. 9. 15. 14:56
Algorithm
deque를 이용한 풀이 #deque를 썼으나 시간초과 import collections n, m = map(int, input().split()) d = collections.deque() b = collections.deque() db = collections.deque() for i in range(n+m): b.append(input()) for i in range(n): d.append(b.popleft()) for i in range(len(d)): if d[i] in b: db.append(d[i]) db = sorted(db) print(len(db)) for i in range(len(db)): print(db[i]) 우선 주어진 N과 M이 500,000 이하의 자연수로 컸기 때문에 li..

백준 알고리즘 파이썬(Python) 1316번 그룹 단어 체커
2021. 9. 13. 18:43
Algorithm
풀이 직관적으로 막구현(?) 으로 풀었다. n = int(input()) total_cnt = 0 for i in range(n): s = input() cnt = 0 arr = [] #나왔던 글자를 저장하는 리스트 for i in range(len(s)): if i == 0: #인덱스 에러를 방지하기 위한 처리 arr.append(s[i]) continue elif s[i] == s[i-1]: #연속으로 같은 글자가 나오는 경우 이미 앞에서 arr에 넣어줬으므로 continue continue elif s[i] not in arr: #만약 s[i]가 즉 처리하는 글자가 arr에 없다면 즉 한번도 안나왔다면 arr에 추가 arr.append(s[i]) elif s[i] in arr: #만약 s[i]가 즉..

리트코드(LeetCode) 5번 가장 긴 팬린드롬 부분 문자열(Longest Palindromic Substring)
2021. 9. 13. 15:37
Algorithm
풀이 두 포인터가 중앙을 중심으로 확장하는 형태의 풀이 우선 확장은 팰린드롬의 길이가 홀수인지 짝수인지에 따라 달라진다. 이 이야기를 하기 전에 우선 확장(expand) 함수를 만들어보자 expand 함수 코드 def expand(left, right): while left >= 0 and right < len(s) and s[left] == s[right]: left -= 1 right += 1 return s[left + 1:right] while문은 조건이 참일 경우 지속적으로 실행되는 조건문임으로 위의 3가지의 조건중 하나라도 거짓이 되면 left -= 1 rihgt += 1 이 실행되지 않는다. 예외처리 if len(s) < 2 or s == s[::-1]: return s 예외처리를 통한 필터..

리트코드(LeetCode) 49번 그룹 애너그램(Group Anagrams)
2021. 9. 9. 14:54
Algorithm
문제를 풀기 전에 파이썬에서의 정렬, 그리고 defaultdict에 대한 간단한 정리를 하고 풀어보도록 하자 파이썬에서의 정렬 파이썬에서의 정렬은 기본적으로 팀 소트(TimSort)를 이용한다. 팀 소트는 사실상 병합 정렬과 퀵 정렬을 제치고 현업에서 가장 널리 쓰이는 정렬 알고리즘이다. 파이썬에서 쓰는 기본적인 정렬은 다음과 같이 사용한다. a = [2, 5, 1, 9, 7] a_sort = sorted(a) print(a) print(a_sort) #출력값 #[2, 5, 1, 9, 7] #[1, 2, 5, 7, 9] 여기서 주의해야 할 점은 제자리 정렬(In Place Sort)과 정렬 결과를 별도로 리턴하는 sorted( )는 다르다는 점이다. #제자리 정렬(In place Sort) #정렬 결과를..