[LeetCode] 파이썬 알고리즘 인터뷰 리뷰 복습하며 다시 풀기 (2020.11.10)

728x90
반응형

파이썬 알고리즘 인터뷰 책을 기반으로 공부했는데 (다른 알고리즘 시험에서 안나올 것 같은 뒷 부분이나 중간에 링크드 리스트 부분은 좀 넘겼다) 까먹은 부분 복습할 겸 처음부터 다시 풀어보았다 

 

요즘 사이드 프로젝트 때문에 리액트만 하고 있어서 자꾸 알고리즘을 푸는 감각을 잃는 것 같다 다시 건들어보려고 한다

 

125번. 펠림드롬 - 한 번에 성공

leetcode.com/problems/valid-palindrome/submissions/

from collections import deque
class Solution:
    def isPalindrome(self, s: str) -> bool:
        s=[c.lower() for c in s if c.isalnum()]
        return s==s[::-1]

344번. 문자열 뒤집기 - 한 번에 성공

제자리 정렬을 해야한다

class Solution:
    def reverseString(self, s: List[str]) -> None:
        s.reverse()

937번 순서 재정렬하기 + lambda sort 

문제가 무슨 말인지 매번 헷갈리는 문제

숫자는 입력된 순서 그대로 문자로 구성된 로그는 뒤의 숫자들 기준으로 정렬 후 식별자로 정렬한다

class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        letter,num=[],[]
        for log in logs:
            if log.split()[1].isdigit():
                num.append(log)
            else:
                letter.append(log)
        letter.sort(key=lambda x: (x.split()[1:],x.split()[0]))
        return letter+num

        

함수 형태로 만들어서 넣어줘도 된다

def func(X):
	return x.split()[1],x.aplit()[0]
 letter.sort(key=func)

819번 가장 흔한 단어 

defaultdict(int)로 개수 세서 return max(x, key=x.get) 이나

Collections.Counter을 써서 most_common이라는 함수를 쓴다 

정규표현식은 공부안했어서 매번 찾아서 한다

from collections import Counter
import re
class Solution:
    def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
        x=re.sub(r'[^\w]',' ',paragraph)
        res=[]
        for p in x.lower().split():
            if p not in banned:
                res.append(p)
        c=Counter(res)
        return c.most_common(1)[0][0]
            
                
                
        

49번 그룹 아나그램

정렬 시 같은 단어가 되는 것들을 묶어서 배열 형태로 리턴해준다 

리트코드는 그냥 res.values()를 리턴해줘도 된다

from collections import defaultdict
class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:

        res=defaultdict(list)
        for str in strs:
            res[''.join(sorted(str))].append(str)
        ans=[]
        for k in res.values():
            ans.append(k)
        return ans

sorted함수에도 key를 넣을 수 있다  sorted(a,key=len) 이런식으로 사용한다

 

728x90
반응형
TAGS.

Comments