본문 바로가기
Algorithm Problem Solving/BaekJoon

[BaekJoon] 백준 6996 애너그램 (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 8. 21.
728x90
반응형

BaekJoon 백준 6996 애너그램 문제는 두 단어 A와 B가 주어졌을 때, A에 속하는 알파벳의 순서를 바꾸어서 B를 만들 수 있다면, A와 B를 애너그램이라고 하는데, 두 단어가 애너그램인지 아닌지 구하는 문제이다. 정렬에 관한 문제로 난이도는 Bronze 1이다.

 

BaekJoon 6996 애너그램 문제 정보

출처

- https://www.acmicpc.net/problem/6996

알고리즘 분류

- 정렬 sort, 문자열, 구현

난이도

- 브론즈 1 / Bronze 1

 

애너그램 문제 요약

  • 두 단어 A와 B가 주어졌을 때, A에 속하는 알파벳의 순서를 바꾸어서 B를 만들 수 있다면, A와 B를 애너그램이라고 한다.
  • 두 단어가 애너그램인지 아닌지 구하여 출력한다.
  • 단어는 길이가 100을 넘지 않고 알파벳 소문자로만 이루어져 있다.

 

문제 풀이 과정

  1. 두 단어를 알파벳 한 자씩 리스트에 각각 저장한다.
  2. 두 단어의 길이가 1) 다르면 애너그램이 아니라고 출력한다.
  3. 2) 같으면 두 단어를 한 글자씩 비교한다.
  4. 같은 알파벳을 찾으면 두 번째 단어(비교하는 단어)에서 해당 알파벳을 제거한다.
  5. 모든 알파벳의 비교가 끝날 때까지 같은 알파벳이 없으면 애너그램이 아니라고 출력한다.
  6. 모든 알파벳의 비교가 끝났는데 애너그램의 결과가 나오지 않았으면 애너그램이므로 애너그램이라고 출력한다.

 

코드 및 설명
  • tmp - 두 번째 단어를 문자열로 저장해놓은 변수
  • fin - 애너그램인지 아닌지의 결과가 나왔으면 1, 안 나왔으면 0을 저장해놓은 플래그 변수
for _ in range(int(input())):
    a, b = map(list, input().split())
    tmp = ''.join(b)
    aLen, bLen = len(a), len(b)
    fin = 0
    # 문자열의 길이가 다르면
    if aLen != bLen:
        print(f'{"".join(a)} & {"".join(b)} are NOT anagrams.')
        fin = 1
    else:
        for i in range(aLen):
            for j in range(aLen - i):
                # 같은 알파벳 찾으면
                if a[i] == b[j]:
                    del b[j]
                    bLen -= 1
                    break
                # 같은 알파벳 없으면
                else:
                    if j == bLen - 1:
                        print(f'{"".join(a)} & {tmp} are NOT anagrams.')
                        fin = 1
    if not fin:
        print(f'{"".join(a)} & {tmp} are anagrams.')

BaekJoon 백준 6996 애너그램 문제를 파이썬 python 비교, 정렬로 풀어보았다. 난이도는 Bronze 브론즈 1이다. 

728x90
반응형

댓글