코테공부

프로그래머스 34일차 - 숫자 짝꿍

알면 알 수록 재밌다! 2023. 3. 22. 10:58
문제 설명
두 정수 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
지문에 설명된 예시와 같습니다.

 

해설

 

이것도 dictionary에 넣고 풀까하다가 다른 사람 풀이를 봤다.

 

문자열에서 0~9까지의 정수를 찾는다.

물론 정수에서 count 함수를 사용할 수 없으니 문자열로 변환해서 찾는다.

그리고 min함수를 사용해 한쪽은 100 다른쪽은 123450 처럼 0이 1개와 2개 차이날 수 있으므로 가장 작은 수를 곱한다.

그럼 str(i) = 0 이고 이것이 1개라면 0이 answer에 append 된다.

 

그래서 아무것도 공통 문자가  없으면 빈문자열을 리턴하고

문자열 길이와 0의 개수가 같다면 000 또는 00만 나오는 경우라면 0을 리턴하고

그외 정상적인 경우에는 123 처럼 나오니까 이를 문자열 뒤집기 해서 리턴해준다.