A63. 짝꿍
두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다.
X, Y의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다. X, Y의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다.
두 정수 X, Y가 주어졌을 때, X, Y의 짝꿍을 return하는 solution 함수를 완성해주세요.
예를 들어, 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의 각각의 자리수에 대해 for문을 돌리고,
이게 Y에 있다면 Y를 하나씩 지워나가면서 비교한다
가장 직관적이고 단순한 방법이겠지만, len(X) * len(Y)만큼 루프를 돌려야한다는 점에서 연산이 크게 늘어나게 된다.
def solution(X, Y):
answer = ''
cnt = 0
for i in X:
if i in Y:
Y = Y.replace(i, '', 1)
answer += i
cnt += 1
answer = ''.join(sorted(answer, reverse=True))
if cnt == 0:
answer = '-1'
if max(answer) == '0':
answer = '0'
return answer
X의 자리수를 딕셔너리에 key로 넣고, 그 수만큼 value를 넣어준다.
그 후, 딕셔너리.keys()에 있는 값들에 대해서만 Y에서 count를 진행하고,
딕셔너리의 value값 vs. Y에서 count된 값 중 낮은 값을 선택하여 answer에 넣어주면 된다.
def solution(X, Y):
answer = ''
in_x = {}
for i in X:
if i in in_x.keys():
in_x[i] += 1
else:
in_x[i] = 1
for (key, value) in sorted(in_x.items(), reverse=True):
cnt = Y.count(key)
answer += key * (min(cnt, value))
if answer == '':
answer = '-1'
elif answer[0] == '0':
answer = '0'
return answer
일단 최초안을 진행하면서 확인했던 부분부터 정리하겠다.
파이썬 replace( ) 문자열을 변경하는 함수 (Python)
리스트에서는 del이나 remove를 사용했지만, 문자열에서는 replace 함수를 통해 특정 문자열을 제거할 수 있다.
replace(old, new, [count])
new에 ''을 넣으면 old가 삭제되는 효과
count의 경우 내가 원하는 개수만큼 old를 new로 바꿔줄 수 있어서 중복되는 값에 여러번 적용해주기에도 편리하다.
Python) 파이썬에서 문자열 내의 문자 정렬
[Python] 정렬 문법 sort() sorted() reverse
우선 sort()와 sorted()의 차이부터.
sort()는 리스트에서만 사용할 수 있는 메서드로, 리스트 자체를 정렬시키는 함수이다.
list.sort()를 하면 별도의 변수에 받아줄 필요없이 그 리스트를 그대로 정렬시킬 수 있다.
반면 sorted()는 새롭게 정렬된 이터러블 객체를 반환하는 것.
리스트뿐 아니라 문자열, 딕셔터리 객체 등도 반환할 수 있다
파이썬 리스트(Python List) count() 와 len()
리스트에 count() 메서드를 사용하면 포함된 특정 문자의 개수를 셀 수 있다.
list.count('hi')
[python] list에서 중복 제거하기
집합(set)은 중복을 허락하지 않기 때문에
리스트 -> 집합 -> 리스트로 변환만 해줘도 중복을 쉽게 제거할 수 있다
[Python] max(str, ...)에 대해서
숫자형뿐 아니라 문자열, 리스트 등에서도 max, min 함수를 사용할 수 있다.
여기서 주의할 점 중 하나가, 문자형으로 된 숫자를 비교할 때는, 앞에서부터 유니코드 값을 비교한다.
즉, '2000'과 '800'을 비교할 때 숫자가 아닌 문자라면 800이 더 크다고 나타난다.
[Python] 사전 자료형의 키, 값 기준으로 정렬하기 (sort a Dictionary by key, value)
for문에 딕셔너리 객체를 사용할 때, key 또는 value를 sort한 결과를 기준으로 for문을 돌릴 수 있다.
for (key, value) in sorted(dictionary.items(), reverse=True):
로 하면 key값을 기준으로 내림차순 정렬을 하며,
값을 기준으로 정렬하고 싶다면 key = lambda x:x[1]을 통해 미리 정렬을 시켜놓고, 여기서 key, value를 뽑아낼 수 있다.
# in reverse order
pgm_lang_val_reverse = sorted(pgm_lang.items(), reverse=True, key=lambda item: item[1])
for key, value in pgm_lang_val_reverse:
print(key, ":", value)