본문 바로가기

알고리즘

[python][HackerRank] Making Anagrams 문제 풀이 파이썬

1. 문제 해석

어떠한 학생이 아나그램..? 을 배웠다는 스토리로 시작한다..

각 문자의 중복이 없게 삭제할 문자(알파벳)의 개수 구하기

 

2. 접근 방법

python의 collections 모듈의 유용한 함수인 Counter 객체가 있다.

알고리즘 문제를 풀다보면.. 고수분들이 저 모듈로 한줄에 풀어버리는 경우가 있었다.

일단 알파벳이 몇개있는지 알아야하니깐.. (순서 상관없이)

해당 모듈을 사용할 수 있다.

사용법은 다음과 같다.

 

import collections

한 후,

collections.Counter(arr) #리스트의 개수만 카운트한다..

따라서 문자열을 list로 변환하는게 우선일것이다.

그다음 알파벳이 몇개씩있는 딕셔너리를 얻었으므로, 중복된 문자를빼준다. 그리고 남아있는 친구들의 출현횟수 (딕셔너리의 v값 일것이다.) 을 더해준다.

Counter은 참 야무지게 뻴셈으로 연산도된다. 파이썬 감사합니다! 

Life is too short, You need python.

요약 - 1. 알파벳 세기   2. 중복된 알파벳 빼기

def makeAnagram(a, b):
    remove = 0
    la = list(a)
    lb = list(b)
    dla = collections.Counter(la)
    dlb = collections.Counter(lb)
    for k,v in (dlb-dla).items() :
        remove += v
    for k,v in (dla-dlb).items() :
        remove += v
    return remove

you can make better code.. thx..