알고리즘/프로그래머스

[프로그래머스 | Lv1] 숫자 짝꿍 (Python)

sssbin 2023. 1. 11. 16:25

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

(실패)

입력받은 숫자를 리스트로 만들어서 역순으로 정렬해주고

반복문을 돌려 2개의 리스트(임의로 a, b)를 비교해서 숫자가 같으면 인덱스 둘다 넘어가고

a<b이면 b만 넘어가고, 반대의 경우에는 a만 넘어가게 하여 둘 중 하나의 인덱스가 끝나면 종료시켰다.

하지만 입력받은 숫자의 범위가 굉장히 크기 때문에 시간 초과가 떴다..😅

# 프로그래머스 131128: 숫자 짝꿍

def solution(X, Y):
    X = sorted(list(map(int, X)), reverse=1)
    Y = sorted(list(map(int, Y)), reverse=1)
    
    i = 0
    j = 0
    result = ""
    while (i < len(X) and j < len(Y)):
        if X[i] == Y[j]:
            result += str(X[i])
            i += 1
            j += 1
        elif X[i] < Y[j]:
            j += 1
        else:
            i += 1
  
    if result == "":
        return '-1'
    else:
        return str(int(result))

 

(성공)

숫자 0~9를 기준으로 반복문을 돌려줬다. (큰 숫자를 구해야 하니 9 -> 0)

그리고 문자열 앞의 0~을 걸러야 한다고 생각해서 result를 string -> int -> string 변환 과정을 거쳤었는데,

생각해보니 어차피 숫자가 높은 순으로 정렬했기 때문에 답이 0이 아닌 이상 문자열 앞에 0이 올 경우는 없다..!

따라서 result의 맨 앞 글자가 0이면 그 문자열은 무조건 0이기 때문에 0으로 반환해줬다...!

# 프로그래머스 131128: 숫자 짝꿍

def solution(X, Y):
    result = ''
    for i in range(9, -1, -1):
        num = str(i)
        result += num * min(X.count(num), Y.count(num))
   
    if result == "":
        return '-1'
    elif result[0] == "0":
        return '0'
    else:
        return result