문제 확인

 

프로그래머스

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

programmers.co.kr

나의 풀이

  • 공통된 숫자를 미리 확인한 뒤 필요한 숫자만 개수를 확인했다.
    • 하지만 확인할 숫자의 개수가 10개 뿐이어서 굳이 그럴 필요는 없었던 거 같다.
  • 0이 여러번 반복되는 문자열을 처리하기 위해서 정규 표현식을 사용 했다.

정규 표현식

from collections import Counter
import re

def solution(X, Y):
    answer = ""
    # 문자열로 변경
    X, Y = map(str, (X, Y))
    # 공통 숫자 확인
    com_num = sorted(set(X) & set(Y), reverse = True)
    # 없을 경우 -1 리턴
    if not com_num:
        return "-1"
    # 성분 개수 세기
    cnt_X, cnt_Y = Counter(X), Counter(Y)
    # 공통 문자 있는 경우
    for i in com_num:
        answer += str(i * min(cnt_X[i], cnt_Y[i]))
    answer = "".join(answer)
    # 0이 여러개인 경우 0으로 처리
    answer = re.sub("^0+", "0", answer)
    
    return answer

다른 사람 풀이

  • 처음부터 9 ~ 0 순으로 숫자를 조회해서 answer의 성분이 내림차순으로 더해진다. 
def solution(X, Y):
    answer = ''

    for i in range(9,-1,-1) :
        answer += (str(i) * min(X.count(str(i)), Y.count(str(i))))

    if answer == '' :
        return '-1'
    elif len(answer) == answer.count('0'):
        return '0'
    else :
        return answer
 

프로그래머스

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

programmers.co.kr