반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- leetcode #python #dfs #재귀
- exoplayer #mediaplayer #엑소플레이어 #안드로이드 #android
- leetcode #subsets #dfs #itertools #python
- dfs #leetcode #python #graph #그래프
- AsyncTask #doinbackground #스레드 #thread #android #안드로이드
- final #java #자바 #안드로이드
- dfs #python #leetcode
- dfs #bfs #leetcode #python
- 아스테리스크 #Asterisk #파이썬
- 다익스트라 #알고리즘 #bfs #그리디 #다이나믹프로그래밍 #leetcode #python
- dfs #그래프 #graph #python #leetcode #course #schedule
- 백준 #파이썬 #bfs #백트래킹 #1697 #숨바꼭질
- dfs #bfs #트리구조 #이진트리 #leetcode #python #파이썬
- context #android #getApplicationContext #activity #생명주기 #lifecycle
- 리트코드 #팰린드롬 #파이썬
- dfs #bfs #이진트리 #파이썬 #리트코드
- handler #looper #thread #runnable #핸들러 #루퍼 #스레드 #러너블
- dfs #bfs #트리구조 #이진트리 #leetcode #파이썬 #python
- dfs #이진트리 #트리구조 #직렬화 #역직렬화 #파이썬 #리트코드 #leetcode #python
- python #백준 #9375 #패션왕 #신해빈
- gcd #최대공약수 #백준 #2981 #검문
- python #백준 #2580 #스도쿠 #dfs #백트래킹
- 해시테이블 #heapq #파이썬 #리트코드 #알고리즘
- dfs #leetcode #python
- 파이썬 #zip
- Python #leetcode #dfs #그래프 #백트래킹
- 2004 #조합 0의 개수 #백준
- dfs #python #leetcode #combination
- 다익스트라 #dijkstra #leetcode #파이썬 #python #algorithm #787
- 코틀린 #Do it #깡샘 #안드로이드
Archives
- Today
- Total
멋진 개발자가 되고 싶다
[LeetCode] 49. 그룹 애너그램(Group Anagrams) 본문
728x90
반응형
문자열 배열을 받아 애너그램 단위로 그룹핑하라. 어떤 순서로든 답을 반환해도 된다.
1. 내가 직접 푼 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
strs.sort(key=lambda x: sorted(x)) # 정렬된 str을 기준으로 줄 세우기
output = list()
output.append([strs[0]])
strs.pop(0)
i = 0
# 앞의 str과 비교하여 애너그램이면 앞 str의 리스트에 추가, 그렇지 않으면 따로 리스트 생성
for str in strs:
if sorted(str) == sorted(output[i][0]):
output[i].append(str)
else:
output.append([str])
i = i+1
return output
|
cs |
해설 :
입력받은 strs가 순서가 뒤죽박죽이기 때문에
우선 정렬을 시켰다(보통 정렬을 시켜놓고 문제를 푸는 것이 편하더라..).
그 후 그룹핑할 리스트인 output을 만들고
뒤의 반복문을 사용할 때 strs의 0번째 str은 비교할 대상이 없으니까 저런 식으로 미리 넣어두고 시작.
반복문에서 앞의 정렬된 str과 그 다음 정렬된 str을 비교하여
애너그램이면 같은 리스트에 넣고
앞선 str의 애너그램이 아니면 따로 리스트를 만든다.
** 깔끔한 답안 **
2. 정렬하여 딕셔너리에 추가
1
2
3
4
5
6
7
8
9
|
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
anagrams = collections.defaultdict(list)
for word in strs:
# 정렬하여 딕셔너리에 추가
anagrams[''.join(sorted(word))].append(word)
print(anagrams)
return list(anagrams.values())
|
cs |
해설 :
기존의 딕셔너리는 존재하지 않는 key 값을 넣으면 error를 출력한다.
그래서 defaultdict를 생성했다!
이후 정렬한 값이 존재하면 그대로 넣어주고
존재하지 않으면 따로 생성해주고 넣어준다.
(너무 간단해서 놀랍다...)
마지막으로 key 값을 제외하고 출력해야 하므로 anagrams.value()를 써준다.
출처 : 파이썬 알고리즘 인터뷰 (글 : 박상길 그림 : 정진호) [책만]
728x90
반응형
'Algorithm Study > leetcode' 카테고리의 다른 글
[LeetCode] 1.두 수의 합(Two Sum) (0) | 2021.06.27 |
---|---|
[LeetCode] 5. 가장 긴 팰린드롬 부분 문자열(Longest Palindrom Substring) (0) | 2021.06.26 |
[LeetCode] 819. 가장 흔한 단어(Most Common Word) (0) | 2021.06.25 |
[LeetCode] 937. 로그 파일 재정렬(Reorder Log Files) (0) | 2021.06.25 |
[LeetCode] 344. 문자열 뒤집기( Reverse String) (0) | 2021.06.24 |