[프로그래머스 파이썬] 숫자 짝꿍

일단 해볼게·2024년 1월 12일
0

프로그래머스

목록 보기
88/106

https://school.programmers.co.kr/learn/courses/30/lessons/131128

def solution(X, Y):
    result = ''
    a = [0,0,0,0,0,0,0,0,0,0]
    b = [0,0,0,0,0,0,0,0,0,0]
    
    for i in X: # X에 0~9까지 숫자가 몇개 있는지 count
        value = int(i)
        a[value] += 1
    
    for i in Y: # Y에 0~9까지 숫자가 몇개 있는지 count
        value = int(i)
        b[value] += 1
    
    for i in range(9, -1, -1): # 9~0까지 count한 수 중에서 최소값을 result에 추가
        result += str(i) * min(a[i],b[i]) 
 
    if(len(result) == 0): # ''이면 '-1' 반환
        return '-1'
    if(result[0] == '0'): # 000이더라도 '0' 반환
        return '0'
              
    return result

처음 시도한 시간초과 풀이

def solution(X, Y):
    answer = ''
    x = list(X)
    x.sort(reverse = True)
    
    for i in x:
        for j in Y:
            if j == i: # 같은 경우 answer에 추가 및 *로 대체
                answer += i
                Y = Y.replace(j, "*", 1)
                break
                
    if answer == '':
        return "-1"
        
    return str(int(answer))

다른 사람 풀이

from collections import Counter
def solution(X, Y):
    x, y = list(X), list(Y)
    arr = []
    answer = ""

    c_x, c_y = Counter(x) , Counter(y)
    for key in c_x.keys(): # counter 키 값 추출
        if key in c_y.keys(): # 키 중에 값이 최소인 것을 arr에 추가
            arr.append((int(key), min(c_x[key], c_y[key]))) 

    if not arr:
        return "-1"
    elif len(arr) == 1 and arr[0][0] == 0:
        return "0"

    arr = sorted(arr, key = lambda x : x[0], reverse= True) # 키 값으로 내림차순 정렬

    for ar in arr:
        answer += str(ar[0]) * int(ar[1]) # 키 * 값 만큼 answer에 추가

    return answer

Counter를 사용하니 약 5배정도 빨라졌다.

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글