유형 : 구현

풀이 시간 : 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
복사했습니다!