💡문제 설명 및 예시

한줄 요약 : 두 정수 X와 Y에서 공통으로 나타나는 숫자들을 이용해 만들 수 있는 가장 큰 정수를 반환하는 함수를 구현하세요. 없다면 "-1", 0으로만 이루어져 있으면 "0" 반환
💡작성코드 1
# <<시간초과 코드>>
def solution(X, Y):
answer = []
X_list = list(X)
Y_list = list(Y)
for x in X_list :
if x in Y_list :
answer.append(x)
Y_list.remove(x) # remove() : 리스트에서 첫 번째로 나오는 x를 삭제
if len(answer) != 0 :
answer.sort(reverse=True)
result = ''.join(answer)
if set(result) == set('0') :
return '0'
else :
return result
else :
return '-1'
💡작성코드 2
1. 0으로 이루어진 리스트를 생성 ex) [0, 0, 0, 0, 0, ... , 0]
2. X (ex, "12321") 을 순회하며 리스트의 인덱스와 값(0~9)이 동일하기 때문에 해당하는 위치에 1씩 더해준다
-> [0, 2, 2, 1, 0, 0, 0, 0, 0, 0] , Y 도 동일
3. 이렇게 리스트를 채운 후 for 문을 이용해 9 부터 0까지 -1 씩 줄여가며 X_list 와 Y_list 가 값이 있는 경우에 한해서 중복 개수 만큼 (min(X_list[i], Y_list[i]) result 문자열에 추가
4. 비어있다면 (중복이 없다면) '-1' return
5. 9부터 내려가며 순회했기 때문에 result 의 첫번째 문자가 '0' 이라는 것은 '0' 밖에 없다는 뜻. 따라서, '0' return
def solution(X, Y):
result = ''
X_list = [0] * 10
Y_list = [0] * 10
for x in X :
X_list[int(x)] += 1
for y in Y :
Y_list[int(y)] += 1
# print(X_list, Y_list)
for i in range(9, -1, -1) :
if X_list[i] > 0 and Y_list[i] > 0 :
result += str(i) * min(X_list[i], Y_list[i]) # 둘 중 작은 수만큼 추가 : 공통으로 나타나는 수
if result == '' :
return '-1'
elif result[0] == '0':
return '0'
else :
return result
갈수록 생각의 깊이 하고 구조화해야 풀 수 있다.. 1일 1코테 하는 것도 쉽지 않구만
반응형
'Programming > Python' 카테고리의 다른 글
[프로그래머스 Python] 문자열 나누기 (0) | 2024.08.07 |
---|---|
[프로그래머스 Python] 체육복 (0) | 2024.08.06 |
[프로그래머스 Python] 기사단원의 무기 (1) | 2024.07.24 |
[프로그래머스 Python] 소수 만들기 (0) | 2024.07.18 |
[프로그래머스 Python] 카드 뭉치 (1) | 2024.07.17 |