[프로그래머스]숫자 짝꿍(python)

Effy_ee·2023년 10월 10일
0

코딩테스트

목록 보기
69/118

(Lv.01) 숫자짝꿍👾
https://school.programmers.co.kr/learn/courses/30/lessons/131128

from collections import Counter

def solution(X, Y):
    counter_x = Counter(map(int, X))
    counter_y = Counter(map(int, Y))

    common_elements = counter_x & counter_y
    
    if not common_elements:
        return "-1"
    
    answer_list = [str(i) * count for i, count in sorted(common_elements.items())]
    answer = ''.join(answer_list)[::-1]

    if int(answer) == 0:
         return "0"

    return answer

시간 초과로 실패🫠

배운점🤯

  answer_list = [str(i) * count for i, count in sorted(common_elements.items())]

common_elements가 예를 들어 {2: 3, 1: 2, 3: 1} 이라고 가정하겠습니다. 이는 숫자 2가 세 번, 1이 두 번, 3이 한 번 등장한다는 것을 의미합니다.

먼저 common_elements.items()를 호출하면 다음과 같은 (키, 값) 튜플들의 리스트를 얻습니다.

[(2, 3), (1, 2), (3, 1)]

다음으로 이 리스트에 sorted() 함수를 적용하면 키 값을 기준으로 정렬된 새로운 리스트를 얻습니다.

[(1, 2), (2, 3), (3, 1)]

마지막으로 이 정렬된 리스트에 대해 리스트 컴프리헨션을 수행합니다. 각 튜플 (i, count)에 대해 문자열 'i' count를 생성합니다.'i' count는 문자열 'i'를 count번 반복한 새로운 문자열을 생성하는 것입니다.

결과는 다음과 같은 문자열들의 리스트가 됩니다.

['11', '222', '3']

다른 사람 풀이

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

0개의 댓글