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
내가 제출한 코드와 비슷한 듯하지만 🟠 부분이나 🟢 부분의 아이디어가 다르다.