Programing/프로그래머스 오답노트
[프로그래머스] 숫자 짝꿍 - ( set의 중복 요소 반영 트릭 )
yooom
2023. 9. 17. 22:39
문제 설명
두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다(단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다). X, Y의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다. X, Y의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다. 예를 들어, X = 3403이고 Y = 13203이라면, X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 3, 0, 3으로 만들 수 있는 가장 큰 정수인 330입니다. 다른 예시로 X = 5525이고 Y = 1255이면 X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 2, 5, 5로 만들 수 있는 가장 큰 정수인 552입니다(X에는 5가 3개, Y에는 5가 2개 나타나므로 남는 5 한 개는 짝 지을 수 없습니다.) 두 정수 X, Y가 주어졌을 때, X, Y의 짝꿍을 return하는 solution 함수를 완성해주세요.
풀이
def solution(X, Y):
x_arr = list(X)
y_arr = list(Y)
num_arr = []
for i in x_arr:
if i in y_arr:
num_arr.append(i) # 겹치는 수, 새로운 배열에 추가
y_arr.remove(i) # 겹치는 수, Y에서 제거
if len(num_arr) > 0:
num_arr.sort(reverse=True)
answer = str(int(''.join(num_arr))) # 00 이 나오는 경우 0으로 바꾸기 위해 int()
else:
answer = str(-1) # 정답은 str 타입으로 받는다
return answer
테스트 케이스 11~15가 시간초과가 났다. 오답이다. for 에서 숫자를 하나씩 읽는 과정만 수정하면 되지 않을까 싶다.
dict과 set을 써서 해결해보자.
def solution(X, Y):
answer = []
for i in (set(X) & set(Y)): # set을 쓰면 100 같은 중복은 10이 반환
for j in range(min(X.count(i), Y.count(i))) :
answer.append(i) # 중복 값을 중복 수 만큼 추가
answer.sort(reverse=True)
if len(answer) == 0: # 예외처리
return "-1"
if answer[0] == "0":
return "0"
answer = "".join(answer)
return answer
한 블로그에서는 이렇게 set을 썼다. set은 중복을 무시하기 때문에 사용이 까다로웠는데 단순하게 해결했다.
def solution(X, Y):
answer = []
x_arr = {}
y_arr = {}
for i in X:
x_arr[i] = x_arr.get(i,0) + 1 # {'1': 1, '0': 2}
for i in Y:
y_arr[i] = y_arr.get(i,0) + 1 # {'2': 1, '3': 1, '4': 1, '5': 1} 가 된다.
for key in x_arr: # .items()를 쓰면 key, value 모두 받음
if key in y_arr.keys(): # y_arr만 써도 됨 // key가 없는데 조사를 하면 오류가 남
while x_arr[key] > 0 and y_arr[key] > 0: # ex) 100 / 2345 에서 key = 1 없음
answer.append(key)
x_arr[key] -= 1 # x_arr[key] = x_arr.get[(key) -1
y_arr[key] -= 1
answer.sort(reverse = True)
if len(answer) == 0:
return "-1"
if answer[0] == "0":
return "0"
answer = "".join(answer)
return answer
dict로 해결하는 것도 유사하게 진행된다.
출처
https://school.programmers.co.kr/learn/courses/30/lessons/131128#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
728x90