숫자 짝꿍 [python3]

김태경·2023년 7월 6일
0

코딩테스트

목록 보기
12/12

X와 Y에 공통으로 나타나는 정수를 이용하여(여러개 있다면 중복 가능) 만들 수 있는 가장 큰 정수를 만드는 문제입니다!

먼저
1. 공통으로 있는 정수만 뽑아냅니다.
2. 그 수들을 이용하여 가장 큰 수를 만듭니다.
3. 0이 여러개라면 0을 리턴
4. 공통된게 없으면 -1을 리턴

내가 푼 풀이

def solution(X, Y):
    a=[]
    y=list(Y)
    for x in X:
        if x in y:
            a.append(x)
            y.pop(y.index(x))
            
    a=sorted(a,reverse=True)
    if len(a)==0:
        return "-1"
    elif max(a)=="0":
        return "0"
    else:     
        return ''.join(a)

X에서 하나씩 꺼내 Y에 있으면 a라는 리스트에 넣어주고 방금 넣은 원소는 Y에서 pop함수를 이용하여 삭제해줍니다. 그럼 공통으로 존재하는 정수들이 들어있는 a라는 리스트가 생성됩니다. 이후 내림차순으로 정렬을 해줍니다!

만약 a가 공리스트라면 공통으로 존재하는게 없다는 뜻이니 0을 리턴하고, a의 가장 큰 값이 0이라면 공통을 존재하는게 0뿐이니 0을 리턴해줍니다. 마지막으로는 위의 두가지 조건을 만족하지 않는 나머지 리스트들은 join함수를 사용하여 리스트를 풀어줍니다.

결과적으로 코드를 제출 했을 때 19개의 테스트 케이스 중 5개에서 시간초과 오류가 났습니다.

구글링을 통해 다른 제가 짠 코드와 같은 경우에 공통된 정수를 구하는 과정에서 시간 초과가 일어날 수 있다는 것을 확인하고 참고하여 새로운 코드를 작성하였습니다.

참고 풀이

def solution(X, Y):
    answer=""
    for step in range(9,-1,-1):
        answer+= str(step)*min(X.count(str(step)),Y.count(str(step)))
             
    if len(list(answer))==0:
        return "-1"
    elif max(list(answer))=="0":
        return "0"
    else:     
        return answer

for문을 사용해 9부터 1까지 한 계단씩 내려오면서, X와 Y에서 count함수를 사용해 각각 몇개씩 갖고있는지 count해줍니다. 둘 중 더 작은 개수만큼 answer에 더해줍니다. 이런식으로 진행하면 따로 sort해 줄 필요 없이 내림차순으로 공통된 정수로 이루어진 값을 구할 수 있게됩니다. 밑에 if문은 위와 동일합니다.

profile
신입 ^3^

0개의 댓글