[프로그래머스] LV1. 숫자 짝꿍 (파이썬, Python)

2026. 5. 14. 17:14·Algorithm Solving
 

문제 링크

 

구분

코딩테스트 연습 > 연습문제

 

문제 설명

두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다(단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다). X, Y의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다. X, Y의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다.

예를 들어, X = 3403이고 Y = 13203이라면, X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 3, 0, 3으로 만들 수 있는 가장 큰 정수인 330입니다. 다른 예시로 X = 5525이고 Y = 1255이면 X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 2, 5, 5로 만들 수 있는 가장 큰 정수인 552입니다(X에는 5가 3개, Y에는 5가 2개 나타나므로 남는 5 한 개는 짝 지을 수 없습니다.)
두 정수 X, Y가 주어졌을 때, X, Y의 짝꿍을 return하는 solution 함수를 완성해주세요.

제한사항
  • 3 ≤ X, Y의 길이(자릿수) ≤ 3,000,000입니다.
  • X, Y는 0으로 시작하지 않습니다.
  • X, Y의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.

 

입출력 예
X Y result
"100" "2345" "-1"
"100" "203045" "0"
"100" "123450" "10"
"12321" "42531" "321"
"5525" "1255" "552"

입출력 예 설명

입출력 예 #1

  • X, Y의 짝꿍은 존재하지 않습니다. 따라서 "-1"을 return합니다.

입출력 예 #2

  • X, Y의 공통된 숫자는 0으로만 구성되어 있기 때문에, 두 수의 짝꿍은 정수 0입니다. 따라서 "0"을 return합니다.

입출력 예 #3

  • X, Y의 짝꿍은 10이므로, "10"을 return합니다.

입출력 예 #4

  • X, Y의 짝꿍은 321입니다. 따라서 "321"을 return합니다.

입출력 예 #5

  • 지문에 설명된 예시와 같습니다.

 

 

 

 

 

문제 풀이 

def solution(X, Y):

    dict_x = {}
    dict_y = {}
    answer = ''
    
    for x in X:
        if x not in dict_x:
            dict_x[x] = 1
        else :
            dict_x[x] += 1
        
    for y in Y:
        if y not in dict_y:
            dict_y[y] = 1
        else :
            dict_y[y] += 1
            
    # 반복문을 돌아서 두 딕셔너리 같은 키의 값을 비교하고싶음
    # 그리고 대소비교해서 값이 더 작은걸로 선택
    for key_x in dict_x:
        if key_x in dict_y:
            count = min(dict_x[key_x], dict_y[key_x])
            answer += key_x * count
    
    answer = ''.join(sorted(answer, reverse=True))
    
    if answer is '':
        answer = "-1"
    elif answer[0] == "0":
        answer = "0"

    return answer

 

나는 딕셔너리 두개를 사용해서 x에 해당되는 키가 딕셔너리y에도 있으면 최솟값을 찾고, 값을 최솟값만큼 문자열로 저장

그리고 문자열을 정렬. sorted()를 사용하게 되면 결과가 리스트로 나옴

따라서 join으로 문자열로 붙이고, 짝이 없다면 -1, 0인 경우에는 0만 출력하게끔 ("000" X) 코드를 짰다.

 

 

 

다른 분의 풀이도 참고하면 좋을 것 같다.  count()를 통해 문자열이나 리스트에서 쉽게 빈도를 셀 수 있다는 점!!

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

'Algorithm Solving' 카테고리의 다른 글

[프로그래머스] LV2. 기능개발 (파이썬, Python)  (0) 2026.05.15
[프로그래머스] LV1. 성격 유형 검사하기 (카카오 인턴십) (파이썬, Python)  (0) 2026.05.14
[프로그래머스] LV1. 완주하지 못한 선수 (파이썬, Python)  (0) 2026.05.14
[프로그래머스] LV1. 크레인 인형뽑기 게임(카카오 인턴십) (파이썬, Python)  (0) 2026.05.12
[프로그래머스] LV1. 키패드 누르기(카카오 인턴) (파이썬, Python)  (0) 2026.05.12
'Algorithm Solving' 카테고리의 다른 글
  • [프로그래머스] LV2. 기능개발 (파이썬, Python)
  • [프로그래머스] LV1. 성격 유형 검사하기 (카카오 인턴십) (파이썬, Python)
  • [프로그래머스] LV1. 완주하지 못한 선수 (파이썬, Python)
  • [프로그래머스] LV1. 크레인 인형뽑기 게임(카카오 인턴십) (파이썬, Python)
아기꼬래
아기꼬래
  • 아기꼬래
    아꼬의 개발 일지
    아기꼬래
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • 프로젝트 및 공모전 (4)
        • Oracle 프로젝트 (3)
      • Algorithm Solving (26)
      • SQL (9)
      • Data Analysis (12)
      • AI (0)
      • FastAPI (0)
      • Spring Boot (0)
      • Oracle (1)
      • AWS (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Tableau
    오라클 프로젝트
    coding test
    일경험
    data analysis
    파이썬
    SQL
    Oracle 일경험
    python
    Oracle
    시각화
    Algorithm
    Algorithm Solving
    미래내일 일경험
    태블로
    Oracle 프로젝트
    한국오라클
    데이터시각화
    프로그래머스
    일경험 프로젝트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
아기꼬래
[프로그래머스] LV1. 숫자 짝꿍 (파이썬, Python)
상단으로

티스토리툴바