본문 바로가기
프로그래머스/Python

[프로그래머스] 숫자 짝꿍 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 9. 1.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

공통 숫자를 조합해 가장 큰 정수를 만들어야 하므로 9부터 앞자리에 와야 한다.

하여 9부터 0까지 반복하며 해당 숫자가 각 문자열에 몇 개가 포함되어 있는지 개수를 세어주고 적은 개수만큼 해당 숫자를 정답 문자열에 추가한다.하지만 이때 0만 공통 숫자인데 0이 2개 이상으로 중복되어 있다면 "0"이 나와야 하는 것을 고려해야 한다.이때 가장 큰 정수를 만들어 한 번에 숫자형으로 바꿔줄 수도 있지만 각 문자열이 최대 3,000,000 글자까지 가능하므로 모두 0인 문자열이라면 결과가 3,000,000 자리의 0으로 구성된 문자열이 될 것이다. 이를 정수로 바꾸려고 int 함수를 사용한다면 매우 많은 시간이 소요된다. 하여 "0"이 되는 경우를 먼저 따져 준다. 

 

  1. 9부터 0까지 반복하며 for i in range(9, -1, -1)
  2. 각 문자열에서 해당 숫자의 개수를 세어 저장한다. countX = X.count(str(i))
  3. 이때 숫자는 정수형이므로 문자열형으로 바꾸어 세어줘야 한다. countY = Y.count(str(i))
  4. 만약 세어준 개수가 두 문자열 다 0개가 아닐 때 if (countX != 0 and countY != 0)
  5. 정답 문자열의 길이가 0이고 해당 숫자가 0이면 if (len(answer) == 0) and (i == 0)
  6. 정답은 "0"이다 answer = "0"
  7. 반면에 정답 문자열의 길이가 0이 아니고 해당 숫자도 0이 아니면 else
  8. 각 문자열에서 세어준 개수 중 더 작은 값을 저장한다. result = countX if (countX < countY) else countY
  9. 저장한 값만큼 반복하며 정답에 해당 숫자를 문자열로 추가한다. for _ in range(result): answer += str(i)
  10. 만약 만든 정답이 공백이면 짝꿍이 존재하지 않는 경우이므로 정답은 -1이다. if (len(answer) == 0): answer = "-1"
반응형

3. 소스코드

def solution(X, Y):
    answer = ''
    
    for i in range(9, -1, -1):
        countX = X.count(str(i))
        countY = Y.count(str(i))
        
        if (countX != 0 and countY != 0):
            if (len(answer) == 0) and (i == 0):
                answer = "0"
            else:
                result = countX if (countX < countY) else countY
                for _ in range(result):
                    answer += str(i)
        
    if (len(answer) == 0):
        answer = '-1'
        
    return answer
728x90
반응형