문제 확인은 아래 링크를 통해 확인해주세요!
https://school.programmers.co.kr/learn/courses/30/lessons/131128
"""
프로그래머스 LV1: 숫자 짝궁 (11~16번 테스트케이스 시간 초과로 실패)
https://school.programmers.co.kr/learn/courses/30/lessons/131128
"""
def solution(X, Y):
x_dict = { x: X.count(x) for x in set(X)}
y_dict = { y: Y.count(y) for y in set(Y)}
data = []
for x_key, x_value in x_dict.items():
if x_key in y_dict.keys():
for _ in range(min(x_dict[x_key], y_dict[x_key])):
data.append(x_key)
if len(data) == 0:
return '-1'
else:
data = sorted(data, reverse=True)
data = int("".join(data))
return str(data)
원래 문제에서 최대 몇백만자리 까지 이런거 확인 안하다가.. 확인을 해야겠다고 많이 느껴서 확인해봤는데 300만이어서 나름..? 고려를 해서 짜봤지만 테스트 케이스 11번에서 16번까지 시간초과로 에러가 발생했다.
"""
프로그래머스 LV1: 숫자 짝궁 (휴.. 풀었다)
https://school.programmers.co.kr/learn/courses/30/lessons/131128
"""
def solution(X, Y):
x_count, y_count = [0] * 10, [0] * 10
# 숫자 몇번 나왔는지 저장
for x in X:
x_count[int(x)] += 1
for y in Y:
y_count[int(y)] += 1
# print(x_count, y_count)
result = ""
for i in range(9, -1, -1):
result += str(i) * min(x_count[i], y_count[i])
if result == "":
return "-1"
else:
zeroCheck = True
for j in range(len(result)):
if result[j] != '0':
zeroCheck = False
break
if zeroCheck == True:
return "0"
return result
00
으로 나오거나 023123
이런식으로 나와버리면 우리는 0
그리고 23123
으로 출력을 하고싶은 것이다. 원래는 int로 형변환을 하고 다시 str로 형변환 해서 return을 하고 싶었는데 그러면 시간이 많이 소요되니까.... 앞에 0이 있고 뒤에 추가 숫자가 붙으면 추가 숫자만 return하고, 뒤에 추가숫자가 없으면 0만 return하게 했다.len(result) == 0의 count
면 0만 출력하게 하면 되네...? 에효 멍청하네 참...