Algorithm/백준
[BAEKJOON] 1919번: 애너그램 만들기
NegotiationMan
2023. 9. 5. 17:53
문제
두 영어 단어가 철자의 순서를 뒤바꾸어 같아질 수 있을 때, 그러한 두 단어를 서로 애너그램 관계에 있다고 한다. 예를 들면 occurs 라는 영어 단어와 succor 는 서로 애너그램 관계에 있는데, occurs의 각 문자들의 순서를 잘 바꾸면 succor이 되기 때문이다.
한 편, dared와 bread는 서로 애너그램 관계에 있지 않다. 하지만 dared에서 맨 앞의 d를 제거하고, bread에서 제일 앞의 b를 제거하면, ared와 read라는 서로 애너그램 관계에 있는 단어가 남게 된다.
두 개의 영어 단어가 주어졌을 때, 두 단어가 서로 애너그램 관계에 있도록 만들기 위해서 제거해야 하는 최소 개수의 문자 수를 구하는 프로그램을 작성하시오. 문자를 제거할 때에는 아무 위치에 있는 문자든지 제거할 수 있다.
코드
arr = [0] * 26
# 첫 번째 문자열을 입력 받고, 각 문자의 빈도수를 배열에 저장
for s in list(input()):
arr[ord(s) - 97] += 1
# 두 번째 문자열을 입력 받고, 각 문자의 빈도수를 배열에서 감소
for s in list(input()):
arr[ord(s) - 97] -= 1
# 배열의 모든 요소의 절대값을 더하여 필요한 작업 횟수 계산
print(sum(map(abs, arr))) # 배열의 각 요소의 절대값을 더함
나의 생각
arr[ord(s) - 97] 대신에 arr[ord(s)-ord('a')]도 가능하다.