ABC137 C - Green Bin

備忘録

問題

atcoder.jp

回答

import sys
import os


def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    N = int(sys.stdin.readline().rstrip())
    lines = ["".join(sorted(line.rstrip())) for line in sys.stdin.readlines()]

    ret = 0
    sortedlines = {}
    for n in range(N):
        item = lines[n]
        if item in sortedlines:
            sortedlines[item] += 1
            ret += sortedlines[item]
        else:
            sortedlines[item] = 0

    print(ret)


if __name__ == '__main__':
    main()

考え方

アナグラムで文字列が一致するということは、使用している文字と文字の数が同一ということなので、
文字列Sをすべてソートしたリスト(lines)を作る。
次に、linesを頭から順に取り出した文字列をkey、一致した文字列の数をvalueとしたdict型オブジェクトを作る。
後はソートした文字列が一致した場合(dict型オブジェクトのkeyに文字列Sが存在している場合)
一致している文字列の数(value)を加算していくことで、回答が得られる。