https://school.programmers.co.kr/learn/courses/30/lessons/131128
문제 풀이는 쉬웠는데 시간 초과 때문에 많은 시간을 소비했다.
고민 끝에 원인은 정수형을 문자열로 변경하는 곳에서 나타난다는 것을 알 수 있었다.
문제의 제한사항 중 자릿수는 최대 3,000,000 까지 주어지는데,
이 3백만자를 정수형에서 문자열로 변경하려면 상당히 많은 시간이 필요하다.
import time
a = ["3"] * 3000000
t0 = time.time()
a = ''.join(a)
a = str(int(a))
print(time.time()-t0)
# 145.21014595031738
따라서, 정수형을 문자열로 변경하는 코드를 생략하여 구현하여 해결하였다.
코딩 테스트에서 정수형을 문자열로, 문자열을 정수형으로 변경하는 것을 종종 사용하는데, 다음 부턴 꼭 주의해야겠다.
from collections import Counter
def solution(X, Y):
answer = []
XC = Counter(X)
YC = Counter(Y)
for key in set(XC.keys()) & set(YC.keys()):
n = min(XC[key], YC[key])
for _ in range(n):
answer.append(key)
answer.sort(reverse=True)
# 시간 초과 코드
# answer = ''.join(answer)
# if answer == '':
# return "-1"
# else:
# return str(int(answer)) # "00000" -> "0"
answer = ''.join(answer)
if answer == '':
return "-1"
elif set(answer) == {"0"}:
return "0"
else:
return answer
print(solution("100", "2345")) # -1
print(solution("100", "203045")) # 0
print(solution("100", "123450")) # 10
print(solution("12321", "42531")) # 321
print(solution("5525", "1255")) # 552
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] / [Level 1] / [Python] 대충 만든 자판 (0) | 2024.01.15 |
---|---|
[프로그래머스] / [Level 1] / [Python] 문자열 나누기 (0) | 2024.01.15 |
[프로그래머스] / [Level 2] / [Python] 디펜스 게임 (0) | 2024.01.11 |
[프로그래머스] / [Level 1] / [Python] 옹알이 (2) (0) | 2023.10.31 |
[프로그래머스] / [Level 1] / [Python] 기사단원의 무기 (0) | 2023.10.31 |