숫자 짝꿍

Polla·2023년 2월 8일
0

programmers

목록 보기
42/58
post-thumbnail

프로그래머스 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))
    

우선 xy는 리스트 컴프리헨션을 사용해서 runtime을 줄였다.
이렇게 사용한건 sorted를 같이 붙여 쓰기 위해서는 int형이 필요했고, Counter() 자체가 iterable한 값만 가능하기 때문이었다.

sorted(x, reverse = True) 를 통해서 정리해주고,
Counter(x) & Counter(y) 를 통해 교집합을 찾아줬다.
그 후 이 값을 .elements() 를 통해 값만 뽑아줬다.

원래 두번째 if문에 max(result)를 썼는데 벨로그에 쓰다보니 이미
sort 한거 그냥 result[0] 값만 확인해주면 됐었다...
그랬더니 runtime이 어마무시하게 줄더라^^....

그 후 ''.join((리스트 컴프리헨션)) 으로 묶어줬다.

아무튼 그래도 원클 나니까 뿌듯하네요...후...


profile
트러블 슈팅 Blog => https://polla.palms.blog/home

0개의 댓글