일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 백준 #알고리즘 #파이썬 #코딩테스트
- 다이나믹프로그래밍
- 파이썬
- Dijkstra
- 자바 #java
- 투포인터
- 코딩테스트
- DFS
- 파이썬 #백준 #알고리즘 #코딩테스트
- css #웹 #생활코딩
- java #자바 #생활코딩
- 백트랙킹
- PYTHON
- 알고리즘
- react #리액트 #동빈나 #나동빈 #유튜브강의
- java #자바 #나동빈
- java #자바
- react #리액트 #동빈나
- 백준
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- css #생활코딩 #웹
- 다익스트라
- 프로그래머스
- 재귀
- dp
- BFS
- 백준 #파이썬 #알고리즘 #코딩테스트
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- java #자바 #동빈나
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
Archives
- Today
- Total
커리까지
[프로그래머스] 숫자 짝꿍 파이썬 본문
728x90
SMALL
문제 설명
두 정수 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 함수를 완성해주세요.
제한사항
- 3 ≤
X
,Y
의 길이(자릿수) ≤ 3,000,000입니다. X
,Y
는 0으로 시작하지 않습니다.X
,Y
의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.
입출력 예
X | Y | result |
---|---|---|
"100" | "2345" | "-1" |
"100" | "203045" | "0" |
"100" | "123450" | "10" |
"12321" | "42531" | "321" |
"5525" | "1255" | "552" |
입출력 예 설명
입출력 예 #1
X
,Y
의 짝꿍은 존재하지 않습니다. 따라서 "-1"을 return합니다.
입출력 예 #2
X
,Y
의 공통된 숫자는 0으로만 구성되어 있기 때문에, 두 수의 짝꿍은 정수 0입니다. 따라서 "0"을 return합니다.
입출력 예 #3
X
,Y
의 짝꿍은 10이므로, "10"을 return합니다.
입출력 예 #4
X
,Y
의 짝꿍은 321입니다. 따라서 "321"을 return합니다.
입출력 예 #5
- 지문에 설명된 예시와 같습니다.
제출 답안
- 처음에는 같은 자리수에 있는 숫자가 같아야지 맞는 건 줄 알았다.
- 그게 아니라 그냥 같은 숫자가 있는지가 핵심이다.
Counter
를 사용해서 각각 숫자의 개수를 담았다.- 그 다음에 길이가 작은 것을 기준으로 해야 없는 숫자를 바로 날려버릴 수 있다.
- 이게
min_len
과max_len
이다.
- 이게
- for loop를 돌면서 만약 숫자가 공통적으로 있다면 그 숫자가 적게 나온 것을 기준으로
num
에 담는다. num
을 다시 내림차순으로 정렬한다.- 정렬 후 for loop를 돌면서 나온 횟수만큼
answer
에 더한다.
from collections import Counter
def solution(X, Y):
num = {}
x_c = Counter(X)
y_c = Counter(Y)
if len(x_c) < len(y_c):
min_len = x_c
max_len = y_c
else:
min_len = y_c
max_len = x_c
for key, val in min_len.items():
if key in max_len.keys():
num[key] = min(val, max_len[key])
if not num:
return '-1'
if len(num) == 1 and '0' in num.keys():
return '0'
answer = ''
num = sorted(num.items(), key=lambda x:x[0], reverse=True)
for key, val in num:
answer += key * val
return answer
728x90
LIST
'알고리즘 > 풀이' 카테고리의 다른 글
[프로그래머스] 햄버거 만들기 파이썬 (0) | 2023.07.06 |
---|---|
[프로그래머스] 옹알이 (2) 파이썬 (0) | 2023.07.06 |
[프로그래머스] 카드 뭉치 파이썬 (0) | 2023.07.06 |
[프로그래머스] 과일 장수 파이썬 (0) | 2023.07.06 |
[프로그래머스] 명예의 전당 (1) 파이썬 (0) | 2023.07.02 |
Comments