일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- dfs #leetcode #python #graph #그래프
- final #java #자바 #안드로이드
- dfs #bfs #이진트리 #파이썬 #리트코드
- 해시테이블 #heapq #파이썬 #리트코드 #알고리즘
- python #백준 #9375 #패션왕 #신해빈
- context #android #getApplicationContext #activity #생명주기 #lifecycle
- 파이썬 #zip
- dfs #bfs #트리구조 #이진트리 #leetcode #파이썬 #python
- 다익스트라 #알고리즘 #bfs #그리디 #다이나믹프로그래밍 #leetcode #python
- dfs #python #leetcode #combination
- Python #leetcode #dfs #그래프 #백트래킹
- exoplayer #mediaplayer #엑소플레이어 #안드로이드 #android
- dfs #bfs #leetcode #python
- handler #looper #thread #runnable #핸들러 #루퍼 #스레드 #러너블
- python #백준 #2580 #스도쿠 #dfs #백트래킹
- dfs #leetcode #python
- 리트코드 #팰린드롬 #파이썬
- 백준 #파이썬 #bfs #백트래킹 #1697 #숨바꼭질
- dfs #이진트리 #트리구조 #직렬화 #역직렬화 #파이썬 #리트코드 #leetcode #python
- 다익스트라 #dijkstra #leetcode #파이썬 #python #algorithm #787
- dfs #그래프 #graph #python #leetcode #course #schedule
- leetcode #subsets #dfs #itertools #python
- AsyncTask #doinbackground #스레드 #thread #android #안드로이드
- 코틀린 #Do it #깡샘 #안드로이드
- gcd #최대공약수 #백준 #2981 #검문
- dfs #python #leetcode
- 아스테리스크 #Asterisk #파이썬
- 2004 #조합 0의 개수 #백준
- leetcode #python #dfs #재귀
- dfs #bfs #트리구조 #이진트리 #leetcode #python #파이썬
- Today
- Total
멋진 개발자가 되고 싶다
[LeetCode] 819. 가장 흔한 단어(Most Common Word) 본문
금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라.
대소문자 구분을 하지 않으며, 구두점(마침표, 쉼표 등) 또한 무시한다.
Input: paragraph = "Bob hit a ball, the hit BALL flew far after it was hit.", banned = ["hit"]
Output: "ball"
내가 직접 푼 코드
1
2
3
4
5
6
7
8
|
class Solution:
def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
string = paragraph.lower()
string = re.sub('[\'?!;",.]',' ',string) # 특수문자 제거
str_list = string.split()
str_list = [word for word in str_list if word not in banned] # ban된거 제거
str_list = collections.Counter(str_list)
return str_list.most_common(1)[0][0]
|
cs |
해설 :
우선 paragraph를 소문자로 바꿔주고 특수문자를 제거해준다.
전에 봤던 re.sub는 아주 유용하게 쓰인다.
단, 특수문자를 입력할 때 '의 경우 그대로 입력하면 ' '과 겹치게 되어 에러가 발생하는데
이때 \' 이런 식으로 입력해주면 된다.
그 후 ban 된 것을 없애주기 위해 한 줄로 표현해봤다.
마지막으로 유용하기 그지없는 collections.Counter와 most_common을 이용하여 가장 빈도가 높은 단어를 뽑아낸다.
** 깔끔 답지 **
1. 리스트 컴프리헨션, Counter 객체 사용
1
2
3
4
5
6
7
8
9
|
class Solution:
def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
words = [word for word in re.sub(r'[^\w]',' ',paragraph)
.lower().split()
if word not in banned]
counts = collections.Counter(words)
return counts.most_common(1)[0][0]
|
cs |
해설 :
나의 코드와 다른 점은 데이터 클렌징(Data Cleansing) 과정이 한 줄로 표현되었다는 것.
그리고 정규표현식이 깔끔하다.
우선 \n은 정규식에서 단어 문자를 뜻하고 ^는 not을 의미한다.
따라서 '단어 문자가 아닌 것'을 내포한다.
여기서 r이 왜 쓰였는지 궁금했다.
알아보니 r은 raw string이란 의미로 만약 \를 문자 그대로 사용하고 싶다면 r\ 이런 식으로 쓰면 된다.
하지만 위에선 왜 저기에 r이 들어있는지는 모르겠다(아시는 분 있으면 댓글 주세요~).
그 뒤로는 내 방식과 같다.
출처 : 파이썬 알고리즘 인터뷰 (글 : 박상길 그림 : 정진호) [책만]
'Algorithm Study > leetcode' 카테고리의 다른 글
[LeetCode] 5. 가장 긴 팰린드롬 부분 문자열(Longest Palindrom Substring) (0) | 2021.06.26 |
---|---|
[LeetCode] 49. 그룹 애너그램(Group Anagrams) (0) | 2021.06.26 |
[LeetCode] 937. 로그 파일 재정렬(Reorder Log Files) (0) | 2021.06.25 |
[LeetCode] 344. 문자열 뒤집기( Reverse String) (0) | 2021.06.24 |
[125번]유효한 팰린드롬(Valid-palindrome) (0) | 2021.06.24 |