https://school.programmers.co.kr/learn/courses/30/lessons/131128
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내풀이
def solution(X, Y):
answer = []
answer2 = ''
X = list(X)
Y = list(Y)
for i in range(0,10):
if X.count(str(i)) <= Y.count(str(i)):
count = X.count(str(i))
else:
count = Y.count(str(i))
answer.append(count)
for i in range(0,10):
# 반복하는 횟수 answer[i]
answer2 += str(i) * answer[i]
answer2 = list(answer2)
answer2.sort(reverse= True)
answer2= "".join(answer2)
if answer2 == "" :
answer2 = "-1"
elif sum(list(map(int,answer2))) ==0:
answer2 = "0"
return answer2
다른사람풀이
def solution(X, Y):
xList = list(X.count(str(x)) for x in range(10))
yList = list(Y.count(str(y)) for y in range(10))
answer = ""
for i in range(9, -1, -1):
answer += str(i) * min(xList[i], yList[i])
if answer == "":
return "-1"
elif answer[0] == "0" and answer[len(answer) - 1] == "0":
return "0"
else:
return answer
해석
- 핵심은 접근을 어떻게 했느냐 이다.
- 처음에는 각각 비교하면서 각 티슈를 뽑는 형식으로 하였으나 큰 숫자가 올경우 반복문 횟수가 너무 많아져서 다른 방법을 생각해냈다.
- 0부터 9까지의 개수를 비교해서 각각 에서 최소값을 뽑은다음
- 그 수를 answer에 문자열 추가하는데 각 숫자의 개수만큼 곱해서 추가한다.
- 그다음 각 값에대한 조건을 걸어준다. (답이 00 000인경우 0으로 초기화)
- 다른사람 풀이
- sort를 사용하지 않고 for 범위에서 9부터 시작해서 1까지 내려온다
총정리
- 처음에 문제에 접근을 할 때 센스있게 접근하면 문제푸는 시간을 많이 줄일 수 있을 거다.
'Programmers > 1단계' 카테고리의 다른 글
[python] 평행 (0) | 2025.03.31 |
---|---|
[2020 카카오 인턴십] 키패드 누르기 (0) | 2022.10.19 |
[2021 카카오채용 인턴십] 숫자 문자열과 영단어 (0) | 2022.10.13 |
[2021 Dev-Matching: 웹 백엔드 개발] 로또의 최고 순위와 최저 순위 (2) | 2022.09.29 |
[Kakao BLind] 1차 비밀지도 (0) | 2022.09.27 |