시간초과가 걸린 내 답
def solution(X, Y):
new_Y = list(Y)
visited = []
for x in X:
if x in new_Y:
visited.append(int(x))
new_Y.remove(x)
visited.sort(reverse = True)
if len(visited) == 0:
return '-1'
elif sum(visited) == 0:
return '0'
else:
return ''.join(str(s) for s in visited)
다른 사람들이 해결 한 정답
from collections import Counter
def solution(X, Y):
# 숫자 개수 세기
nums = Counter(X) & Counter(Y)
if not nums: return '-1' # 공통 없는 경우
elif list(nums) == ['0']: return '0' # 0만 공통인 경우
nums_order = sorted(list(nums),reverse=True) # 내림차순 정렬
answer = ''
for num in nums_order:
answer += num * nums[num]
return answer
Counter에 리스트나 문자열을 입력으로 주게 되면 그 안에 포함된 원소의 개수를 세어 dictionary와 유사한 Counter 객체를 반환한다.
예를 들어 [1,2,2,3,3,3] 라는 리스트가 있을 때 이를 Counter의 입력으로 주면 Counter({3: 3, 2: 2, 1: 1})가 반환된다.
이때 dictionary와 마찬가지로 key로 접근할 수 있다.
따라서 문자열 X, Y에 포함된 글자의 개수를 Counter로 세고 교집합 기능(&)을 이용하여 중복을 찾아낸다.
1) 중복이 없는 경우엔 -1을 반환한다.
2) 중복이 0으로 유일한 경우엔 0을 반환한다.
3) 그 외의 경우 큰 숫자부터 Counter에 key로 접근하여 개수만큼 정답 문자열에 추가하면 된다.