728x90
문제설명
더보기
두 정수 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의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.
입출력 예
문제풀이
- 이번 문제는 입력값이 정수라는 말에 혼동하여 int형을 형변환 한다고 시간을 많이 날린 문제이다. 문제를 잘 읽고 의도를 파악하는 것이 제일 우선이고 코테를 준비하는데 중요한 덕목중 하나인 것 같다.
- 각설하고 해당 문제는 두 문자열이 주어지고 그 두 문자열의 공통되는 문자 즉 교집합을 찾아서 나열한 후 최대값을 리턴하는 것이다. 이때 받은 문자열을 set타입으로 변환하여 교집합을 찾았는데 set형이 문자열 내에서의 중복을 제거하기 때문에 교집합에서 반복되는 문자는 다시 한번 for문을 돌면서 찾아서 추가해 주는 부분이 필요했다. 그리고 나머지 문제에서 요구되는 사항들에 대해서 조건별로 반환값을 달리 해주면 된다.
코드 및 설명
def solution(X, Y):
answer = []
for i in (set(X) & set(Y)):
for _ in range(min(X.count(i), Y.count(i))):
answer+=i
answer.sort(reverse=True)
if len(answer) == 0:
return '-1'
elif answer[0] == '0':
return '0'
return ''.join(answer)
728x90
'CodeGym > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 숫자 변환하기 | 파이썬 (0) | 2024.05.10 |
---|---|
[프로그래머스] 이웃한 칸 | 파이썬 (0) | 2024.05.09 |
[프로그래머스] 대충 만든 자판 | 파이썬 (0) | 2024.05.09 |
[프로그래머스] 둘만의 암호 | 파이썬 (0) | 2024.05.04 |
[프로그래머스_파이썬] 땅따먹기 (0) | 2024.05.03 |