본문 바로가기
🔅코딩테스트 공부🔅/❗프로그래머스(Lv.1)

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

by 윤무무 2023. 2. 14.

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

 

프로그래머스

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

programmers.co.kr

 

1. 내가 작성한 코드
from collections import Counter

def solution(x, y):
    answer = ''
    
    x_dic = Counter(x)
    y_dic = Counter(y)
    d_dic = x_dic - y_dic #x와 y의 차이
    result_dic = x_dic - d_dic #x에서 차이를 빼면 공통인 것이 나옴
    
    if len(result_dic) == 0: #공통인 것이 없을경우 return -1
        return "-1"
    
    if list(result_dic.keys()) == ['0']: #0만 있을 경우 return 0
        return "0"
    
    for i in sorted(result_dic,reverse=True): #그게 아닐 경우
        answer += str(i) * result_dic[i]
    
    return answer

count를 이용하면 시간복잡도가 박살나기 때문에 Counter 모듈을 이용했다.

 

2. 간략한 코드 설명

1. x - (x - y) 을 할 경우 x와 y의 공통 집합이 나온다.

 

2. 공통된 문자가 없을 경우 -1을 return 해야하기 때문에 len 함수를 이용해 길이를 확인한다.

 

3. result_dic.key()를 이용하면 모든 key값이 나오는데, 이 때 0밖에 없으면 return 0한다.

 

4. result_dic을 내림차순 정렬해주고, 각 key를 횟수만큼 곱해서 문자열에 넣어준다.

(개수를 출력하기 위해서는 int를 str으로 변환해서 곱해준다.)

 

(Counter은 산술연산 가능)

 

댓글