https://school.programmers.co.kr/learn/courses/30/lessons/131128
문제 설명
문제 설명
두 정수 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의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.
입출력 예 설명
입출력 예 #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):
answer = ''
S=set(X)&set(Y)
S=list(S)
S.sort(reverse=True)
for i in S:
answer+=i
if not len(S): # 중복값이 없으면 answer은 "-1"
answer="-1"
return answer
X와 Y의 중복값(짝꿍)을 찾는 것이니, 중복값을 찾고 내림차순 정렬하면
답이 나오지 않을까 했지만
첫번째 풀이
중복값을 찾기 위해 SET을 사용했는데 중복값 하나를 제외하고 제거하기 때문에 테스트케이스5번에서 실패하였다.
"552"를 출력해야 했지만, "5"가 두번나와 "52"만 출력된 것이다.
두번째로 코드
>def solution(X, Y):
answer = []
for i in (set(X)&set(Y)) :
for j in range(min(X.count(i), Y.count(i))) :
answer.append(i)
answer.sort(reverse=True)
if len(answer) == 0:
return "-1"
if answer[0] == "0":
return "0"
answer = "".join(answer)
return answer
answer를 리스트로 받고 마지막에 문자열로 합쳐주기로 했다.
for문을 돌려 i변수를 X와 Y의 중복값만큼 반복하며
그 안에 X와 Y의 해당 중복숫자 개수의 최소값을 answer 배열에 넣어주었다.
'Coding Test > Python' 카테고리의 다른 글
[프로그래머스] 최댓값과 최솟값 | Python - 민민의 하드디스크 - 티스토리 (0) | 2023.04.12 |
---|---|
[프로그래머스] 롤케이크 자르기 | Python - 민민의 하드디스크 - 티스토리 (0) | 2023.04.12 |
[프로그래머스] 구명보트(탐욕법) | Python - 민민의 하드디스크 - 티스토리 (0) | 2023.04.12 |
[프로그래머스] 힙(Heap) 이중우선순위큐 | Python - 민민의 하드디스크 - 티스토리 (0) | 2023.04.12 |
[프로그래머스] 단어 퍼즐 | Python - 민민의 하드디스크 - 티스토리 (0) | 2023.04.12 |