Tiny Bunny [Python] 숫자 짝꿍
λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
programmers/Lv.1

[Python] 숫자 짝꿍

by maesil 2025. 4. 21.

문제 μ„€λͺ…

 

두 μ •μˆ˜ 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 ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

 

μž…μΆœλ ₯ 예

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

 

 

제좜 λ‚΄μ—­

from collections import Counter

def solution(X, Y):
    XY = Counter(X) & Counter(Y)
    answer = sorted(list(XY.elements()), reverse=True)
    
    if not len(answer):
        return "-1"
    if all(i == '0' for i in answer):
        return "0"
    return ''.join(answer)

 

if all(i == '0' for i in answer) λŒ€μ‹  if answer[0] == '0' κ°€λŠ₯

 

- Counter: iterable(반볡 κ°€λŠ₯ν•œ 것)의 μš”μ†Œλ³„ 개수λ₯Ό μ„Έμ–΄ λ”•μ…”λ„ˆλ¦¬ ν˜•νƒœλ‘œ λ°˜ν™˜ν•΄μ£ΌλŠ” λ”•μ…”λ„ˆλ¦¬ 클래슀

각 문자(λ˜λŠ” μš”μ†Œ)κ°€ λͺ‡ 번 λ‚˜μ™”λŠ”μ§€ λ”•μ…”λ„ˆλ¦¬μ²˜λŸΌ μ €μž₯

- elements(): 각 μš”μ†Œλ₯Ό ν•΄λ‹Ή μš”μ†Œμ˜ 개수만큼 λ°˜λ³΅ν•΄μ„œ λ¦¬ν„΄ν•΄μ£ΌλŠ” λ©”μ„œλ“œ (0μ΄λ‚˜ 음수 μΉ΄μš΄νŠΈλŠ” λ¬΄μ‹œ)

 

 

λ‹€λ₯Έ 풀이

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

 

iλ₯Ό 9λΆ€ν„° 0κΉŒμ§€ 1μ”© κ°μ†Œμ‹œν‚€λ©΄μ„œ 반볡 - κ°€μž₯ 큰 μˆ«μžλΆ€ν„° 확인

X와 Yμ—μ„œ ν•΄λ‹Ή μˆ«μžκ°€ λͺ‡ 번 λ‚˜μ˜€λŠ”μ§€ count ν›„ κ³΅ν†΅μœΌλ‘œ λ“±μž₯ν•˜λŠ” μ΅œμ†Œ 횟수만큼 λ°˜λ³΅ν•΄μ„œ λΆ™μž„

 

 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ > μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ > μ—°μŠ΅λ¬Έμ œ

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

 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

SW개발자λ₯Ό μœ„ν•œ 평가, ꡐ윑, μ±„μš©κΉŒμ§€ Total Solution을 μ œκ³΅ν•˜λŠ” 개발자 μ„±μž₯을 μœ„ν•œ λ² μ΄μŠ€μΊ ν”„

programmers.co.kr