Sherlock and Anagrams

Eunseo·2022년 5월 2일
0

HackerRank

목록 보기
1/18
post-thumbnail

Problem Link
https://www.hackerrank.com/challenges/sherlock-and-anagrams/problem?isFullScreen=true

✅ Problem Summary

주어진 문장에서 찾을 수 있는 Anagram들의 모든 짝(pair)을 찾는 문제


📑 My Answer

  • 모든 테스트 케이스 통과
def sherlockAndAnagrams(s):
    cnt = 0
    for k in range(1,len(s)):
        tokens = {}
        for i in range(len(s)-k+1):
            try: tokens[''.join(sorted(s[i:i+k]))] += 1
            except: tokens[''.join(sorted(s[i:i+k]))] = 1
        for val in tokens.values():
            cnt += comb(val, 2)
    return cnt

📌 코드 구현 설명

  • 모든 Anagram은 길이가 동일하다는 점을 이용
  • 길이가 1인 substring 에서 순차적으로 길이를 증가시켜가며 모든 substring을 탐색
  • 탐색된 Anagram의 등장 횟수를 딕셔너리(dictionary)에 key값으로 저장
  • 딕셔너리에 저장된 등장횟수로 조합(combination) 연산을 하여 총 Anagram 짝(pair) 개수를 셈

💼 Takeaway

  • 딕셔너리에 key값이 없는 경우, 조건문 없이 깔끔하게 코드를 구현하기 위해 try & except 구문을 활용하는 방법을 배울 수 있었다.

  • try & except 구문 대신 get()을 사용할 수도 있으니 이전 글 참고


profile
내가 공부한 것들

0개의 댓글