[파이썬] 프로그래머스 LV1 숫자짝궁

청수동햄주먹·2023년 4월 10일
0

파이썬코딩테스트

목록 보기
23/35

숫자짝궁

내 코드

from collections import Counter

def solution(X, Y):
    answer = []
    
    xx = Counter(X)
    yy = Counter(Y)
    
    for key in xx.keys():
        if key in yy.keys():
          for x in range(min(xx[key], yy[key])):
            answer.append(key)

    
    if len(answer) == 0:
      return "-1"
    if answer[0] == "0":
      return "0"

    answer.sort(reverse=True)
    result = ''.join(str(x) for x in answer)
    return result

처음에 테스트 케이스가 다 맞아서 제출 했을 때는 시간초과로 실패했었는데,
qna를 찾아보니 "00000....00000" 이 이런식으로 매우 길어지는 경우가 발생!
이 경우 0밖에 없으면 answer[0] == "0" 이므로 ("0"으로 해야지 0으로 하면 안됨) 원래 조건식 int(result)==0에서 이렇게 고쳤더니 통과는 시켰지만..

테스트 11 〉	통과 (790.21ms, 75.3MB)
테스트 12 〉	통과 (846.41ms, 68.8MB)
테스트 13 〉	통과 (758.66ms, 75.6MB)
테스트 14 〉	통과 (821.11ms, 68.7MB)
테스트 15 〉	통과 (822.83ms, 68.7MB)

성능이 💩임

다른 사람의 코드

def solution(X, Y):
    answer = ''

    for i in range(9,-1,-1) :
        answer += (str(i) * min(X.count(str(i)), Y.count(str(i))))

    if answer == '' :
        return '-1'
    elif len(answer) == answer.count('0'):
        return '0'
    else :
        return answer
테스트 11 〉	통과 (86.92ms, 27.6MB)
테스트 12 〉	통과 (86.00ms, 27.6MB)
테스트 13 〉	통과 (86.18ms, 27.6MB)
테스트 14 〉	통과 (81.49ms, 27.7MB)
테스트 15 〉	통과 (84.86ms, 27.5MB)

1/10로 시간을 줄이고 반 이상 메모리 사용도 줄였다.

어차피 숫자는 0~9 열개 밖에 없으니까 for i in range(9,-1,-1): 로 룹을 돌면 된다

  • 내림차순으로 넣어야 하므로 9 부터 시작
  • -1 전까지 -> 0까지
  • -1씩 줄여나감
profile
코딩과 사별까지

0개의 댓글