본문 바로가기
Programming/Python

[프로그래머스 Python] 숫자 짝꿍

by 용스토리랜드 2024. 8. 2.

💡문제 설명 및 예시

 

한줄 요약 : 두 정수 X와 Y에서 공통으로 나타나는 숫자들을 이용해 만들 수 있는 가장 큰 정수를 반환하는 함수를 구현하세요. 없다면 "-1", 0으로만 이루어져 있으면 "0" 반환

 

💡작성코드 1

# <<시간초과 코드>>
def solution(X, Y):
    answer = []

    X_list = list(X)
    Y_list = list(Y)

    for x in X_list : 
        if x in Y_list : 
            answer.append(x)
            Y_list.remove(x) # remove() : 리스트에서 첫 번째로 나오는 x를 삭제

    if len(answer) != 0 :
        answer.sort(reverse=True)
        result = ''.join(answer)
        if set(result) == set('0') : 
            return '0'
        else : 
            return result
        
    else : 
        return '-1'

 

💡작성코드 2

1. 0으로 이루어진 리스트를 생성 ex) [0, 0, 0, 0, 0, ... , 0]

2. X (ex, "12321") 을 순회하며 리스트의 인덱스와 값(0~9)이 동일하기 때문에 해당하는 위치에 1씩 더해준다

-> [0, 2, 2, 1, 0, 0, 0, 0, 0, 0] , Y 도 동일

3. 이렇게 리스트를 채운 후 for 문을 이용해 9 부터 0까지 -1 씩 줄여가며 X_list 와 Y_list 가 값이 있는 경우에 한해서 중복 개수 만큼 (min(X_list[i], Y_list[i]) result 문자열에 추가

4. 비어있다면 (중복이 없다면) '-1' return 

5. 9부터 내려가며 순회했기 때문에 result 의 첫번째 문자가 '0' 이라는 것은 '0' 밖에 없다는 뜻. 따라서, '0' return

def solution(X, Y):
    result = ''
    X_list = [0] * 10
    Y_list = [0] * 10

    for x in X :
        X_list[int(x)] += 1
    for y in Y : 
        Y_list[int(y)] += 1

    # print(X_list, Y_list)

    for i in range(9, -1, -1) : 
        if X_list[i] > 0 and Y_list[i] > 0 : 
            result += str(i) * min(X_list[i], Y_list[i]) # 둘 중 작은 수만큼 추가 : 공통으로 나타나는 수
    if result == '' :
        return '-1'
    elif result[0] == '0':
        return '0'
    else : 
        return result

 

갈수록 생각의 깊이 하고 구조화해야 풀 수 있다.. 1일 1코테 하는 것도 쉽지 않구만 
반응형