DevSSOM
자료구조 - 애너그램 탐지 문제 본문
반응형
연습문제 : 애너그램 탐지
애너그램(Anagram)은 한 문자열의 문자를 재배열해서 다른 뜻을 가지는 다른 단어로 바꾸는 것을 의미함. 두 개의 문자열이 주어졌을 때, 서로가 서로의 애너그램인지 아닌지의 여부를 탐지하는 함수를 만들어봐.
- elice 와 leice 는 애너그램. True를 리턴해야 함.
- cat 과 cap 는 애너그램이 아님. False를 리턴해야 함.
- iamlordvoldemort 와 tommarvoloriddle 은 애너그램. True를 리턴해야 함.
- 문자열의 모든 문자는 영어 소문자라고 가정.
def isAnagram(str1, str2):
return None
def main():
print(isAnagram('iamlordvoldemort', 'tommarvoloriddle')) # should return True
print(isAnagram('cat', 'cap')) #should return False
if __name__ == "__main__":
main()
>>>
배열을 활용한 해설
def isAnagram(str1, str2):
str1List = list(str1)
str2List = list(str2)
str1List.sort()
str2List.sort()
# if (str1List == str2List) : # 이렇게 풀어서 쓸 수도 있고
# return True
# else:
# return False
return (str1List == str2List) # 이렇게 한 줄로 해도 True, False 결과가 나와
def main():
print(isAnagram('iamlordvoldemort', 'tommarvoloriddle')) # should return True
print(isAnagram('cat', 'cap')) #should return False
if __name__ == "__main__":
main()
>>>
해쉬를 활용한 해설
def isAnagram(str1, str2):
dic1 = {} # 딕셔너리 만들어주고
for ch in str1: # str1을 돌면서
dic1[ch] = dic1.get(ch, 0) + 1 # 알파벳 하나하나를 키로 넣어서 딕셔너리에 그 키에 해당하는 빈도수를 계속해서 하나씩 증가시켜줘
for ch in str2:
if ch in dic1:
if dic1[ch] == 0:
return False
else:
dic1[ch] -= 1
else:
return False
return True
728x90
반응형
'자료구조' 카테고리의 다른 글
자료구조 - 배열 문제 : 틀린 문자 찾기 (0) | 2021.06.18 |
---|---|
자료구조 - 배열 문제 : 세번째로 큰 숫자 찾아내기 (0) | 2021.06.17 |
자료구조 - 배열과 해쉬의 차이 (0) | 2021.06.17 |
자료구조 - 해쉬 (0) | 2021.06.16 |
자료구조 - 배열 문제 : 배열의 회전 (0) | 2021.06.15 |
자료구조 - 배열 (0) | 2021.06.14 |
자료구조 - 배열 문제 : 중복된 수 제거하기 (0) | 2021.06.14 |
댓글