본문 바로가기

항해99 chap02

그룹 애너그램

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())

#아이디어

  1. 문자열을 정렬하면 같은 애너그램끼리는 같아지게 된다. ex) eat, ate, tea -> ate로 같아진다.
  2. 그렇게 만들어진 문자열을 key로 하고 원래의 문자열을 value으로 하는 딕셔너리로 저장한다.
  3. 만들어진 딕셔너리의 value만 print()해준다.

#문제점

  1. 문자열 정렬하기
  • 배열을 정렬하는 함수인 .sort()를 사용하였더니 str은 sort가 안된다는 에러메시지 출력
    • str type에 sort()라는 메소드가 없기 때문(이유는 string의 경우 첫글자의 주소값으로 참조를 하기에 원본이 변경되면 안된다.)
      • .sorted()사용하니 문제 해결.
  1. 딕셔너리 삽입
     anagrams["".join(sorted(i))].append(i)
  • KeyError가 출력
    • 딕셔너리에 존재 하지 않는 키값으로 value를 삽입하려고 하여 에러가 발생
      • 예외처리를 해주기위해 try - except 구문을 사용하여 해결

답지풀이

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