첫번째 코드
X의 숫자 원소들의 개수를 세고 X에 원소가 있는 경우만 Y의 원소를 세어 XY라는 리스트를 만들었다.
XY리스트에 숫자가 있는 경우 해당 원소는 짝꿍이 있는 것이므로
"원소 * XY"에서 표현한 개수로 곱한다.
또한 00과 같은 경우 0으로 표현하기 위해 int로 바꾸고 다시 str로 돌린다.
def solution(X, Y):
answer = ''
x_list = [0] * 10
xy_list = [0] * 10
for i in X:
x_list[int(i)] += 1
for i in Y:
if x_list[int(i)] > 0:
xy_list[int(i)] += 1
for i in range(len(xy_list)-1, -1, -1):
if xy_list[i] > 0:
answer += (str(i) * xy_list[i])
if answer:
return str(int(answer))
else:
return "-1"
오류!
두번째 코드
오류의 원인은 X와 Y의 최소값을 고려해야 했다는 걸 알았다.
예를 들어 X = "abc", Y="abcc"이면 내 코드는 c를 두번 불러오기 때문에 두 개의 리스트에서 최소값을 가져와야 한다.
def solution(X, Y):
answer = ''
x_list = [0] * 10
xy_list = [0] * 10
for i in X:
x_list[int(i)] += 1
for i in Y:
if x_list[int(i)] > 0:
xy_list[int(i)] += 1
for i in range(len(xy_list)-1, -1, -1):
if xy_list[i] > 0:
answer += (str(i) * min(xy_list[i], x_list[int(i)]))
if answer:
return str(int(answer))
else:
return "-1"
답은 맞은 듯 하다 시간 초과가 꽤 발생한다!
세번째 코드
str(int(answer))이 부분에서 오래 걸리는듯 하다.
그리고 count, any, all이라는 함수를 알게 되었다!
answer을 문자로 받지 않고 숫자로 받아 생각하자.
두 방법을 신경쓰면서 문제를 풀자!!
def solution(X, Y):
answer = []
for i in range(9, -1, -1):
x = X.count(str(i))
y = Y.count(str(i))
if min(x, y) > 0:
for j in range(min(x, y)):
answer.append(i)
if answer:
if any(answer) == False:
return "0"
else:
return ''.join(map(str, answer))
else:
return "-1"
링크
programmers/프로그래머스/1/131128. 숫자 짝꿍 at main · ornni/programmers
repository for recording Programmers Algorithm problem solving - ornni/programmers
github.com