본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 애너그램 : 6996번 - Python

728x90
반응형

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

 

6996번: 애너그램

첫째 줄에 테스트 케이스의 개수(<100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 100을 넘지 않는 단어가 공백으로 구분되어서 주어진다. 단어는 알파벳 소문자로만 이루어

www.acmicpc.net

 

 

 

문제를 풀면서 몰랐던 개념

 

(1) [Python] Anagram을 판별하는 알고리즘

*Anagram 이란?

한 단어를 구성하는 글자의 개수를 그대로 유지하면서 순서만 바꾼 단어를 일컫는 말이다.

-> 만약 두 단어가 주어졌을 때, 두 문자열이 아나그램이라면 sorted 함수의 인자로 줬을 때 두 개의 값이 같게 나온다.

문자열 'one'은 아나그램이다

"정렬했을 때의 값이 같다!!!"

 

(2) [Python] sorted()와 sort()의 차이점

-> sort 함수는 리스트명.sort() 형식으로 "리스트형의 메소드"이며 리스트 원본 값을 직접 수정

-> sorted 함수는 sorted(리스트명) 형식으로 "내장 함수"이며 리스트 원본 값은 그대로이고 정렬 값을 반환

# sort 함수

arr1 = [5, 2, 8]
arr2 = arr1.sort()	# 원본을 정렬하고 수정

print('arr1: ', arr1)
print('-----정렬 후-----')
print('arr1: ', arr1)
print('arr2: ', arr2)

>>> arr1: [5, 2, 8]
>>> arr1: [2, 5, 8]
>>> arr2: None

* sort() 함수의 리턴 값이 None이다. 정렬된 값은 리턴되지 않는다.

-> 원본 리스트 값이 정렬된 값으로 수정돼있는 것을 볼 수 있음!!!

# sorted 함수

arr1 = [5, 2, 8]
arr2 = sorted(arr1)	# 원본은 유지하고 정렬한 새 리스트를 만듦.

print('arr1: ', arr1)
print('-----정렬 후-----')
print('arr1: ', arr1)
print('arr2: ', arr2)

>>> arr1: [5, 2, 8]
>>> arr1: [5, 2, 8]
>>> arr2: [2, 5, 8]

원본 리스트 arr1 값은 유지되고 정렬된 새 리스트는 arr2에 저장된 것을 볼 수 있다!

 

 

 

문제의 접근 방법

 

- Anagram 개념 알기

 

 

 

내가 막혔던 부분

 

- Anagram을 코드로 구현

- sort 함수와 sorted 함수의 차이점

 

 

 

문제 풀이 방법

 

테스트 케이스 횟수 n번 입력 받기 -> n번만큼 반복문을 돌려서 비교할 두 단어 a,b 입력받기 -> 원본 값을 유지하기 위해(출력 시 사용) sorted 함수를 사용해 두 문자열 정렬 후 A, B에 저장 -> 조건문을 사용해서 만약 A와 B의 값이 같다면 True, 다르다면 False이므로 출력형식에 맞게 출력하기!

 

 

 

소스코드

n = int(input())

for i in range(n):
    a,b = input().split()
    A = sorted(a)
    B = sorted(b)
    if A == B:
        print(str(a)+' &', b, 'are anagrams.')
    else:
        print(str(a)+' &', b, 'are NOT anagrams.')
728x90
반응형