유형 : 구현
풀이 시간 : 8분 -> 총 약 20분
1. 첫 번째 풀이 : 시간 초과
import collections
def solution(X, Y):
answer = ''
numset = dict(collections.Counter(str(X)) & collections.Counter(str(Y)))
idx = list(numset.keys())
idx.sort(reverse = True)
for i in idx:
answer += i * int(numset[i])
if answer == '':
return "-1"
else:
return str(int(answer))
5개 case에서 시간 초과가 났다.
(이거 걍 str(int(answer)) 이 부분 때문이었음.....)
2. 두 번째 풀이: stack 이용
import collections
def solution(X, Y):
answer = ''
xstack = list(X)
ystack = list(Y)
xstack.sort(reverse = True)
ystack.sort(reverse = True)
while xstack and ystack:
if xstack[0] == ystack[0]:
answer += xstack[0]
del xstack[0]
del ystack[0]
else:
if int(xstack[0]) > int(ystack[0]):
while xstack and int(xstack[0]) > int(ystack[0]):
del xstack[0]
if int(xstack[0]) < int(ystack[0]):
while ystack and int(xstack[0]) < int(ystack[0]):
del ystack[0]
if answer == '':
return "-1"
else:
return answer
마찬가지로 시간 초과, 에러 발생.
1번 풀이를 고쳐 해결했다.
<정답 풀이>
import collections
def solution(X, Y):
answer = ''
numset = dict(collections.Counter(str(X)) & collections.Counter(str(Y)))
idx = list(numset.keys())
idx.sort(reverse = True)
for i in idx:
answer += i * int(numset[i])
if answer == '':
return "-1"
if answer.count("0") == len(answer):
return "0"
else:
return answer
Counter로 dict를 만든 뒤, 이 dict에 담긴 횟수만큼 곱해 answer를 만들었다.
두 가지 예외가 있다.
1. answer = '' 빈 문자열인 경우 : "-1" return
2. answer에 0밖에 없는 경우: "0" return
'프로그래머스 > Lv. 1' 카테고리의 다른 글
51. 크레인 인형뽑기 게임 (0) | 2024.07.16 |
---|---|
50. 햄버거 만들기 ★ (0) | 2024.07.16 |
48. 체육복 (0) | 2024.07.16 |
47. 완주하지 못한 선수 (0) | 2024.07.16 |
46. 대충 만든 자판 (+enumerate) (0) | 2024.07.16 |