Problem Solving 🖥️

[Python] 프로그래머스 Lv.1 숫자 짝꿍

nowall 2024. 6. 22. 20:45

문제 설명 요약 

주어진 두 문자열 X, Y는 정수로 이루어진 문자열이다. 둘을 비교하여 서로 짝을 이루는 숫자들을 모은다. 모은 숫자들로 가장 큰 수를 만들어 return한다. 짝을 이루는 숫자가 없다면 "-1"을 return한다. 0은 두개 이상 짝을 이뤄도 "0"을 return한다. 

https://school.programmers.co.kr/learn/courses/30/lessons/131128?language=python3

내가 제출한 코드

def solution(X, Y):
    from collections import Counter
    
    counter_x = Counter(X)
    counter_y = Counter(Y)
    common = []
    
    for digit in counter_x:
        if digit in counter_y:
            common.extend([digit] * min(counter_x[digit], counter_y[digit]))
    
    if not common:
        return "-1"
    
    common.sort(reverse=True)
    if common[0] == '0':
        return "0"
    
    return ''.join(common)

 

 Counter

    collections 모듈의 Counter 클래스는 dictionary를 확장한 클래스로, 데이터의 개수를 셀 때 유용하다.

    counter_x = Counter(X)
    counter_y = Counter(Y)

   각 문자열에서 각 숫자의 빈도수를 계산한다.

 

  핵심 코드

  👉 : 두 문자열에서 공통으로 등장하는 숫자와 그 빈도수를 비교하여, 최소 빈도수만큼 common 리스트에 추가하는 코드

 

  👉 extend() 메서드

    ✔ 다른 리스트나 iterable(반복 가능한 객체)의 요소들을 기존 리스트에 추가한다.

    ✔ append()와 다른 점

      ◾  append()는 리스트의 끝에 단일 요소를 추가한다.

      ◾  extend()는 리스트의 끝에 iterable의 모든 요소를 추가한다.

# append() 예제
list1 = [1, 2, 3]
list1.append([4, 5, 6])
print(list1)  # 출력: [1, 2, 3, [4, 5, 6]]

# append() 예제
list1 = [1, 2, 3]
list1.extend([4, 5, 6])
print(list1)  # 출력: [1, 2, 3, 4, 5, 6]

 

  ''.join(list명)

  리스트의 요소들을 하나의 문자열로 병합

다른 분의 코드

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

내가 제출한 코드와 비슷한 듯하지만 🟠 부분이나 🟢 부분의 아이디어가 다르다.