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) 같으면 두 단어를 한 글자씩 비교한다.
- 같은 알파벳을 찾으면 두 번째 단어(비교하는 단어)에서 해당 알파벳을 제거한다.
- 모든 알파벳의 비교가 끝날 때까지 같은 알파벳이 없으면 애너그램이 아니라고 출력한다.
- 모든 알파벳의 비교가 끝났는데 애너그램의 결과가 나오지 않았으면 애너그램이므로 애너그램이라고 출력한다.
코드 및 설명
- 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
반응형
'Algorithm Problem Solving > BaekJoon' 카테고리의 다른 글
[BaekJoon] 백준 5533 유니크 (Python / 파이썬) (0) | 2021.08.21 |
---|---|
[BaekJoon] 백준 3985 롤 케이크 (Python / 파이썬) (0) | 2021.08.21 |
[BaekJoon] 백준 16395 파스칼의 삼각형 (Python / 파이썬) (1) | 2021.08.20 |
[BaekJoon] 백준 11586 지영 공주님의 마법 거울 (Python / 파이썬) (0) | 2021.08.20 |
[BaekJoon] 백준 14696 딱지놀이 (Python / 파이썬) (0) | 2021.08.20 |
댓글