프로그래머스 lv1 숫자 짝꿍 파이썬
두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다 (단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다). 두 정수 X, Y가 주어졌을 때, X, Y의 짝꿍을 return하는 solution 함수를 완성해주세요.
1. 각각의 수가 있는지 어떻게 확인할까? - for() > 하나하나 확인시 시간이 오래걸릴것으로 생각 - while() > 위와 사유가 마찬가지 - count() > 마찬가지로 매 회마다 O(N)으로 오래걸림 - dictionary() > 나의 역량 부족 ^^... - counter() 2. result 를 어떻게 내야할까? - sorted(x, reverse = True) ? 3. runtime 생각,,, 리스트 컴프리헨션 쓰기..?
from collections import Counter
def solution(x,y):
result = sorted(list((Counter((int(i) for i in x ))&Counter((int(i) for i in y ))).elements()), reverse=True)
if result == []:
return '-1'
if result[0] == 0:
return '0'
return ''.join((str(i) for i in result))
우선 x
와 y
는 리스트 컴프리헨션을 사용해서 runtime
을 줄였다.
이렇게 사용한건 sorted
를 같이 붙여 쓰기 위해서는 int
형이 필요했고, Counter()
자체가 iterable
한 값만 가능하기 때문이었다.
sorted(x, reverse = True)
를 통해서 정리해주고,
Counter(x) & Counter(y)
를 통해 교집합을 찾아줬다.
그 후 이 값을 .elements()
를 통해 값만 뽑아줬다.
원래 두번째 if문에 max(result)
를 썼는데 벨로그에 쓰다보니 이미
sort
한거 그냥 result[0]
값만 확인해주면 됐었다...
그랬더니 runtime
이 어마무시하게 줄더라^^....
그 후 ''.join((리스트 컴프리헨션))
으로 묶어줬다.
아무튼 그래도 원클 나니까 뿌듯하네요...후...