https://school.programmers.co.kr/learn/courses/30/lessons/131128
이 문제도 크게 두 부분으로 나눠서 풀어본다.
1) count() 함수를 사용해서 개수를 count해주고 원소가 두 정수에 존재할 경우에 더 작은 걸 take하기
=> 위에 방법을 안하고 dictionary를 사용해서 해주었다. count는 복잡할것같아서.. 오히려 dictionary가 한번에 count하기가 더 편한 것 같다. (그치만 count를 사용한 방법도 잘 봐두자.)
2) 모아진 공통된 수로 가장 큰 정수를 만들기
def solution(X, Y):
d_1={a:0 for a in set(X)}
d_2={a:0 for a in set(Y)}
temp={}
answer=[]
# 각 X,Y에 있는 문자열에 대해 count해주기
for i in X:
d_1[i]+=1
for j in Y:
d_2[j]+=1
# temp에다가 min함수를 사용해 공통으로 가진 최소의 수만큼 count한 값을 넣어주기
for i in d_1:
if i in d_2:
temp[i]=min(d_1[i], d_2[i])
# answer에다가 해당 수만큼 append시켜주기
for a in temp:
for numb in range(temp[a]):
answer.append(a)
if len(answer)==0:
return '-1'
if sum(list(map(int,answer)))==0:
return '0'
answer.sort(reverse=True)
return ''.join(answer)
딕셔너리를 요긴하게 잘 쓰면 효율적인 것 같다. 앞으로 잘 써야지.
아래는 프로그래머스에서 가장 채택을 많이 받은 코드다.
def solution(X, Y):
answer = ''
for i in range(9,-1,-1) :
answer += (str(i) * min(X.count(str(i)), Y.count(str(i))))
if answer == '' :
return '-1'
elif len(answer) == answer.count('0'):
return '0'
else :
return answer
'코테 준비 > 프로그래머스' 카테고리의 다른 글
[level 1] 옹알이(2) (0) | 2023.05.03 |
---|---|
[level 1] 콜라 문제 (1) | 2023.05.02 |
[level 1] 성격 유형 검사하기 (0) | 2023.05.02 |
[level 1] 신고 결과 받기 (0) | 2023.05.02 |
[level 1] 최소직사각형 (0) | 2023.05.02 |