노트/Algorithm : 알고리즘(63)
-
[파이썬 알고리즘 인터뷰] 가장 긴 팰린드롬 부분 문자열
# 6. 가장 긴 팰린드롬 부분 문자열 가장 긴 팰린드롬 부분 문자열을 출력하라. 예제1 * 입력 "babad" * 출력 "bab" 예제2 * 입력 "cbbd" * 출력 "bb" # 슬라이딩 윈도우 # 팰린드롬 판별 및 투 포인터 확장 def expand(s,left:int, right: int) ->str: while left >=0 and right >> "bb"
2020.12.28 -
[파이썬알고리즘 인터뷰] 그룹 애너그램
문자열 배열을 받아 애너그램 단위로 그룹핑하라. * 입력: ["eat", "tea", "tan", "ate", "nat" , "bat"] * 출력" [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ] input_ = ["eat", "tea", "tan", "ate", "nat" , "bat"] import collections def anagram(strs): anagrams = collections.defaultdict(list) for word in strs: # 정렬하여 딕셔너리에 추가 anagrams["".join(sorted(word))].append(word) return anagrams.values() anagram(input_) >>> dict_values..
2020.12.25 -
[파이썬 알고리즘 인터뷰] 가장 흔한 단어
# 4. 가장 흔한 단어 금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자 구분을 하지 않으며, 구두점(마침표, 수미표 등) 또한 무시한다 * 입력: paragraph = "Bob hit a ball, the hit BALL flew far after it was hit." banned = ["hit"] * 출력 "ball" paragraph = "Bob hit a ball, the hit BALL flew far after it was hit." banned = ["hit"] import re import collections def common_word(paragraph): words=[word for word in re.sub(r'[^\w]'," ",paragraph).lower..
2020.12.24 -
[파이썬 알고리즘 인터뷰] 로그파일 재정렬
출처 : 파이썬 알고리즘 인터뷰 6장 로그파일 재정렬 로그를 재정렬하라. 기준은 다음과 같다. 로그의 가장 앞 부분은 식별자다. 문자로 구성된 로그가 숫자 로그보다 앞에 온다. 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다. 숫자 로그는 입력 순서대로 한다. 입력 logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"] 출력 ["let1 art can", "let3 art zoo", "let2 own kit dig", "dog1 8 1 5 1","dig2 3 6"] logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit d..
2020.12.11 -
[파이썬 알고리즘 인터뷰] 문자열 뒤집기
출처: 파이썬 알고리즘 인터뷰 6장 문자열을 뒤집는 함수를 작성하라. 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 직접 조작하라. 예제1. 입력: ["h", "e", "l", "l", "o"] 출력: ["o", "l", "l", "e", "h"] 예제2. 입력: ["H", "a", "n", "n", "a", "h] 출력: ["h", "a", "n", "n", "a", "H] # 풀이 1. 투 포인터를 이용한 스왑 def reverseString(s)-> None: left, right = 0 , len(s) -1 while left < right: s[left], s[right] = s[right] , s[left] left += 1 right -= 1 return s # 풀이 2. 파이썬 다운 방..
2020.11.28 -
[파이썬알고리즘 인터뷰] 유효한 팰린드롬 구하기
출처: 파이썬 알고리즘 인터뷰 6장 주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다 "A man, a plan, a canal: Panama" -> true "race a car" -> false test = "A man, a plan, a canal: Panama" test2 = "race a car" # 풀이1. 리스트로 변환 def isPalindrome(sentence): # 전처리 strs = [] for char in sentence: if char.isalnum(): strs.append(char.lower()) # 팰린드롬 여부 판별 while len(strs) > 1: if strs.pop(0) != strs.pop(): # 첫번째꺼를 ..
2020.11.28