Group_Anagrams
input = ["eat", "tea", "tan", "ate", "nat", "bat"]
anagrams={}
for i in input:
try:
anagrams["".join(sorted(i))].append(i)
except KeyError:
anagrams["".join(sorted(i))] = [i]
print(anagrams.values())
for i in anagrams.values():
print(i)
#처음 풀이
input = ["eat", "tea", "tan", "ate", "nat", "bat"]
anagrams={}
for i in input:
anagrams["".join(sorted(i))].append(i)
print(anagrams.values())
#아이디어
- 문자열을 정렬하면 같은 애너그램끼리는 같아지게 된다.
ex) eat, ate, tea -> ate로 같아진다.
- 그렇게 만들어진 문자열을
key
로 하고 원래의 문자열을value
으로 하는 딕셔너리로 저장한다. - 만들어진
딕셔너리
의 value만 print()해준다.
#문제점
- 문자열 정렬하기
- 배열을 정렬하는 함수인
.sort()
를 사용하였더니 str은 sort가 안된다는 에러메시지 출력- str type에 sort()라는 메소드가 없기 때문(이유는 string의 경우 첫글자의 주소값으로 참조를 하기에 원본이 변경되면 안된다.)
- .sorted()사용하니 문제 해결.
- str type에 sort()라는 메소드가 없기 때문(이유는 string의 경우 첫글자의 주소값으로 참조를 하기에 원본이 변경되면 안된다.)
- 딕셔너리 삽입
anagrams["".join(sorted(i))].append(i)
- KeyError가 출력
- 딕셔너리에 존재 하지 않는 키값으로 value를 삽입하려고 하여 에러가 발생
- 예외처리를 해주기위해 try - except 구문을 사용하여 해결
- 예외처리를 해주기위해 try - except 구문을 사용하여 해결
- 딕셔너리에 존재 하지 않는 키값으로 value를 삽입하려고 하여 에러가 발생
답지풀이
anagram = collections.defaultdict(list)
for i in input:
anagram["".join(sorted(i))].append(i)
Dictionary
를 사용하다보면, Key/Value이 존재하지 않는 경우에 대한 처리를 해야 하는 경우 기본 값을 설정하는 경우collections.defaultdict(list)
를 사용함으로 존재하지 않는 Key가 들어오게 되더라도 Key의 기본값이 설정되어 있으므로 에러가 발생하지 않습니다.
배운것
String type에서는 .sort()를 사용할 수 없다.
String의 경우 첫 글자의 주소값으로 참조를 하기에 원본이 변경되면 안된다.
Dictionary type에서 존재하지 않는 키를 삽입할경우 collections.defaultDict()를 사용.
Default값이 설정되어 새로운 키를 삽입할 수 있게 해줌
'항해99 chap02' 카테고리의 다른 글
홀짝 연결 리스트 (0) | 2022.01.18 |
---|---|
역순 연결 리스트 (0) | 2022.01.18 |
두 정렬 리스트의 병합 (0) | 2022.01.18 |
배열 파티션 (0) | 2022.01.18 |
가장 긴 펠린드롬 부분 문자열 (0) | 2022.01.18 |