두 수의 공통된 숫자를 그 공통된 개수만큼 가져와 가장 큰수를 만드는 문제
문제 설명
두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k0≤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, Y가 주어졌을 때, X, Y의 짝꿍을 return하는 solution 함수를 완성해주세요.
제한사항
3 ≤ X, Y의 길이
X, Y는 0으로 시작하지 않습니다.
X, Y의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.
https://school.programmers.co.kr/learn/courses/30/lessons/131128
각 숫자별 리스트를 생성해 0~9까지의 개수를 그 인덱스에 저장
두 리스트를 비교하면서
공통된 숫자를 리스트의 인덱스에
공통된 개수를 그 인덱스의 값으로 저장
정렬 후 가장 큰 수 생성
def solution(X, Y):
# 숫자별 개수를 저장할 리스트 생성
xs, ys = [0]*10, [0]*10
# X와 Y의 각 숫자의 개수 계산
for s in "0123456789":
xs[int(s)] = X.count(s)
ys[int(s)] = Y.count(s)
# 공통으로 존재하는 숫자를 찾아서 리스트에 추가
li = []
for i, s in enumerate(zip(xs,ys)):
li.extend([i]*min(s))
# 리스트를 내림차순으로 정렬하여 문자열로 변환
a = "".join(map(str,li[::-1]))
# 결과가 없으면 -1 반환, 첫 번째 숫자가 0이면 0 반환
if not a:
a = "-1"
elif a[0] == '0':
a = '0'
return a
처음부터 바로 짝꿍 숫자만 저장해서 생성하는 방법
def solution(X, Y):
li = []
for s in "0123456789":
li.extend([s]*min(X.count(s), Y.count(s)))
a = "".join(li[::-1])
if not a:
a = "-1"
elif a[0] == '0':
a = '0'
return a
입출력 예
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
지문에 설명된 예시와 같습니다.
'IT > Python' 카테고리의 다른 글
[백준] 20114번 미아 노트 [Python] 0 | 2023.09.05 |
---|---|
[백준] 9575번 행운의 수 [Python] 0 | 2023.09.05 |
[프로그래머스] Lv.1 문자열 나누기 [Python] - 문자열 0 | 2023.09.04 |
[프로그래머스] Lv.1 대충 만든 자판 [Python] - 딕셔너리 0 | 2023.09.04 |