문제 그대로 풀었으나 시간 초과로 실패!
def solution(X, Y):
arr_z = []
arr_x = sorted(list(X), reverse=True)
arr_y = list(Y)
for num in arr_x:
if num in arr_y:
arr_z.append(num)
arr_y.remove(num)
return str(int(''.join(arr_z))) if len(arr_z) else "-1"
arr_x를 정렬하는 대신 필터링이 끝난 arr_z를 정렬해서 약 50%로 시간이 감소되었으나 여전히 시간 초과 실패했다.
위 코드와 거의 비슷해서 코드 첨부는 생략.
dictionary 형식으로 구조를 만들면 반복 횟수를 10회로 고정해서 풀 수 있겠다 생각해서 아래와 같이 해결.
def solution(X, Y):
arr_z = []
answer = []
for num in range(9, -1, -1):
count_x = X.count(num)
count_y = Y.count(num)
arr_z.append((num, min(count_y, count_x))
for num in arr_z:
answer += [num[0]] * num[1]
if len(answer) == 0:
return "-1"
if len(answer) == answer.count("0"):
return "0"
return ''.join(answer)
반복문을 2개로 나누어서 사용했는데 굳이 나눌 필요 없어 보여서 아래와 같이 코드 정리.
정리하다보니 굳이 배열을 사용할 필요도 없어보여서 한줄로 정리
def solution(X, Y):
answer = ''
for num in range(9, -1, -1):
answer += str(num) * min(X.count(str(num)), Y.count(str(num)))
if len(answer) == 0:
return "-1"
if len(answer) == answer.count("0"):
return "0"
return answer
5번째 행에서 한 문장에 형변환이 3번이나 실행되는 점이 마음에 걸려서 반복문을 ['9', '8', ...] 와 같이 아예 string 배열로 돌렸는데 속도면에서 큰 차이가 없었다.
'Algorithm' 카테고리의 다른 글
[Programmers] 133499.ts 옹알이 (2) (0) | 2023.07.14 |
---|---|
[Programmers] 120911.ts 문자열 정렬하기 (2) (0) | 2023.07.14 |
[Programmers] 12973.py 짝지어 제거하기 (0) | 2023.07.06 |
[Programmers] 136798.py 기사단원의 무기 (0) | 2023.07.03 |
[Programmers] 12985.py 예상 대진표 (0) | 2023.07.02 |