출처: https://school.programmers.co.kr/learn/courses/30/lessons/120886?language=python3#
문제 설명
문자열 before와 after가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.
제한사항
0 < before의 길이 == after의 길이 < 1,000
before와 after는 모두 소문자로 이루어져 있습니다.
입출력 예
before after result
"olleh" "hello" 1
"allpe" "apple" 0
내가 작성한 코드문
def solution(before, after):
# list = []
sorted_before = sorted(before)
sorted_after = sorted(after)
if sorted_before == sorted_after:
return 1
else :
return 0
트러블 슈팅
일단 요구사항 파악을 못했다.
거꾸로 뒤집은 결과만 after랑 같은지 확인했는데 그러면 안된다.
순서만 바꾸기 했을때 같아도 1을 반환해야 함
각각 before 변수, after 변수 둘다 정렬 했을때 같은지 확인 해야한다.
다른 사람의 풀이
def solution(before, after):
return 1 if sorted(before)==sorted(after) else 0
두 문자열이 동일한 문자를 동일한 개수만큼 가지고 있는지를 확인
더 간략함
def solution(before, after):
before = list(before)
for i in after:
try:
del before[before.index(i)]
except:
return 0
return 1
문자 제거를 이용한 풀이
after의 문자를 하나씩 순회하면서, 그 문자가 before 리스트에 존재하는지 확인한다.
존재하면 사용된 문자를 before 리스트에서 제거하는 방식이다.
i 문자가 before에 없으면 ValueError가 발생