수 많은 우문은 현답을 만든다

(Easy) 애너그램 유효성 검사 본문

코딩테스트/Dictionaries

(Easy) 애너그램 유효성 검사

aiden.jo 2023. 6. 5. 20:39

리팩토링이 좋아서, 코드 퀄리티에 관심을 가지고 보자

 

애너그램은 단어를 구성하는 똑같은 수의 알파벳들로 다른 단어를 만드는 유희를 말한다.

 

Given two strings s and t, return true if t is an anagram of s, and false otherwise. 

An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once. 

 

Example 1: 

Input: s = "anagram", t = "nagaram" 

Output: true 

 

Example 2: 

Input: s = "rat", t = "car" 

Output: false

 

풀이

더보기

#의식의 흐름대로 짜면 이렇게 된다
        s_dic = dict()
        t_dic = dict()

        for a in s:
            if a in s_dic:
                s_dic[a] += 1
            else:
                s_dic[a] = 1

        for a in t:
            if a in t_dic:
                t_dic[a] += 1
            else:
                t_dic[a] = 1

        if len(s) >= len(t):
            for x in s_dic:
                if x not in t_dic:
                    return False
                if s_dic[x] != t_dic[x]:
                    return False
        
        else:
            for x in t_dic:
                if x not in s_dic:
                    return False
                if s_dic[x] != t_dic[x]:
                    return False

        return True

리팩토링

더보기

# 함수 시작시 길이 밸리데이션을 해주면 for문을 하나 줄일 수 있다.

if len(s) != len(t): 

    return False


# get 을 활용하자. s_dic에서 char를 get 했으나 결과가 없으면 0, 있으면 +1을 하는 코드다.

for char in s: 

    s_dic[char] = s_dic.get(char, 0) + 1

 

# 조건문을 간략화

if char not in t_dict or s_dict[char] != t_dict[char]:

 

# 완성본

if len(s) != len(t): 
    return False
 
s_dic = dict()
t_dic = dict()
 
for char in s:
    s_dic[char] = s_dic.get(char, 0) + 1
for char in t:
    t_dic[char] = t_dic.get(char, 0) + 1
 
for char in s_dic:
    if char not in t_dic or s_dic[char] != t_dic[char]:
        return False
 
return True

'코딩테스트 > Dictionaries' 카테고리의 다른 글

(Hard) Sherlock and Anagrams  (0) 2023.12.15
(Easy) Number of 1 Bits  (0) 2023.06.18
(Easy) Single Number  (0) 2023.06.18