[프로그래머스] 숫자 짝궁

그녕·2024년 4월 17일
0

알고리즘 문제 풀이

목록 보기
32/35

문제 링크

내 코드

내 코드는 시간 초과가 떴다...쩝....

def solution(X, Y):
    answer = ''
    ans=[]
    X = list(X)
    Y = list(Y)
    for i in X[:]:
        for j in Y[:]:
            if i==j:
                ans.append(i)
                X.remove(i)
                Y.remove(j)
                break
    ans.sort(reverse = True)
    if len(ans)==0:
        return "-1"
    return str(int(''.join(ans)))

풀이 1

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

=>말그대로 sort 안하기 위해서 for문 안에 9부터 0까지 역순으로 내려가면서 그 숫자가 나오면 min으로 두개단어의 개수를 비교하여 같은 개수만큼 answer에 합치는 방법이다.
단순하면서도 sort를 안쓰고 하는것이 신기했다. min쓰는 거는 배워야겠다.

풀이 2

def solution(X, Y):
	answer = []
    for i in (set(X)&set(Y)) :
        for j in range(min(X.count(i), Y.count(i))) :#둘다 2개,2개면 j는 0,1이 되어 두번 실행함
            answer.append(i)
    answer.sort(reverse=True)
    if len(answer) == 0:
        return "-1"
    if answer[0] == "0":
        return "0"
    answer = "".join(answer)
    return answer

풀이 1과 비슷하지만 for문에 set을 넣는 방식이다. 이것도 좋은거 같다.

0개의 댓글