Programmers/1단계

[연습 문제] 숫자 짝꿍

Snowboarder 2022. 10. 14. 22:22

https://school.programmers.co.kr/learn/courses/30/lessons/131128

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

내풀이

def solution(X, Y):
    answer = []
    answer2 = ''

    X = list(X)
    Y = list(Y)

    
    for i in range(0,10):
        if X.count(str(i)) <= Y.count(str(i)):
            count = X.count(str(i))
        else:
            count = Y.count(str(i))
        answer.append(count)


    for i in range(0,10):
        #  반복하는 횟수 answer[i]
        answer2 += str(i)  * answer[i] 

    answer2 = list(answer2)
    answer2.sort(reverse= True)
    answer2= "".join(answer2)
   

    if answer2 == "" :
        answer2 = "-1"
    elif sum(list(map(int,answer2))) ==0:
        answer2 = "0"
    


    return answer2

다른사람풀이

def solution(X, Y):
    xList = list(X.count(str(x)) for x in range(10))
    yList = list(Y.count(str(y)) for y in range(10))
    answer = ""
    for i in range(9, -1, -1):
        answer += str(i) * min(xList[i], yList[i])

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

해석

  • 핵심은 접근을 어떻게 했느냐 이다.
  • 처음에는 각각 비교하면서 각 티슈를 뽑는 형식으로 하였으나 큰 숫자가 올경우 반복문 횟수가 너무 많아져서 다른 방법을 생각해냈다.
  • 0부터 9까지의 개수를 비교해서 각각 에서 최소값을 뽑은다음
  • 그 수를 answer에 문자열 추가하는데 각 숫자의 개수만큼 곱해서 추가한다.
  • 그다음 각 값에대한 조건을 걸어준다. (답이 00 000인경우 0으로 초기화)
  • 다른사람 풀이
    • sort를 사용하지 않고 for 범위에서 9부터 시작해서 1까지 내려온다

총정리

  • 처음에 문제에 접근을 할 때 센스있게 접근하면 문제푸는 시간을 많이 줄일 수 있을 거다.