class Solution:
    def distinctNames(self, ideas: List[str]) -> int:
        ans = 0
        heads = {chr(ord('a')+i) : [] for i in range(26)}
        chars = [chr(ord('a')+i) for i in range(26)]
        for idea in ideas:
            heads[idea[0]].append(idea[1:])
        for i in range(25):
            for j in range(i+1, 26):
                x, y = set(heads[chars[i]]), set(heads[chars[j]])
                no = len(x & y)
                ans += 2 * (len(x) - no) * (len(y) - no)
        return ans


처음엔 좀 어려운 문제인가? 하고 봤는데

어떻게 고민하다보니 풀 수 있었음.

처음에는 head(0)에 대한 tail(1부터)들의 모임도 생각하고,

tail에 대한 head들의 모임도 생각했는데 후자는 숫자가 너무 커지더라.