<aside> 👉🏿 문제 링크

</aside>

문제 정리

<aside> 👉🏿 문자열 s, t가 주어진다.

t가 s의 anagram인 경우 true를 아닐 경우 false를 반환하라.

</aside>

Example 1:
Input: s = "anagram", t = "nagaram"
Output: true

Example 2:
Input: s = "rat", t = "car"
Output: false

접근 방법

<aside> 👉🏿 일단 테스트로 파이썬 내장함수를 사용해서 바로 풀어보았다.

하지만 문제가 원하는 답이 이게 아닐 터,

힙 정렬로 풀어보자.

힙 정렬은 heapq 사용과 직접 구현 두가지 모두 해보았다.

</aside>

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if sorted(s) == sorted(t) :
            return True
        else :
            return False

(1) heap 직접 구현

<aside> 👉🏿 힙의 구현은 설명하지 않는다.

따로 heap_sort()라는 함수를 생성해서

heap에 값을 넣고 추출하는 과정을 넣었다.

정렬된 s와 t가 같다면 True를 반환하도록 했다.

</aside>

def heap_sort(text):
    heap = BinaryHeap()
    for char in text:
        heap.insert(char)

    results = [heap.extract() for _ in range(len(text))]

    return results

class Solution:
    def isAnagram(self, s: str, t: str):
        if heap_sort(s) == heap_sort(t) :
            return True
        else :
            return False

(2) heapq 모듈 사용

<aside> 👉🏿 heapq 모듈도 동일한 알고리즘을 사용한다.

</aside>

def heap_sort(self, text):
        heap = []
        for word in text:
            heapq.heappush(heap, word)

        results = [heapq.heappop(heap) for _ in range(len(text))]

        return results

    def isAnagram(self, s: str, t: str) -> bool:
        if self.heap_sort(s) == self.heap_sort(t):
            return True
        else:
            return False

결과