(Python, Java) 프로그래머스 - 튜플
in Algorithm on Programmers, Level2
[문제 링크]
Python 풀이
def solution(s):
answer = []
duple = set() # 빠른 속도를 위해
s = s.lstrip('{').rstrip('}').split('},{')
s.sort(key=len)
for tokens in s:
for token in tokens.split(','):
token = int(token)
if token not in duple:
answer.append(token)
duple.add(token)
return answer
lstrip과 rstrip은 인수로 주어진 문자가 아닌 다른 문자가 나올때까지 왼쪽에서, 오른쪽에서 자릅니다.
Python 풀이 2
import re
from collections import Counter
def solution(s):
counter = Counter(re.findall('\d+',s))
answer = [int(num) for num,cnt in sorted(counter.items(),key=lambda x:x[1],reverse=True)]
return answer
문자열 문제의 경우 다른 분들의 풀이를 보면 정규식을 사용하여 풀이한 경우가 좀 있다.
정규식을 사용할 경우 풀이가 매우 간단해 진다는 장점이 있어서 이번 기회에 정규식을 공부했다.
Java 풀이
class Solution {
public int[] solution(String s) {
HashMap<Integer, Integer> map = new HashMap<>();
// 쪼개서 숫자만 남기기
int[] keys = Arrays.stream(s.substring(2, s.length() - 2).split("\\},\\{|,")).mapToInt(Integer::valueOf)
.toArray();
// map에 저장
for (int key : keys) {
map.put(key,map.getOrDefault(key,0)+1);
}
// value를 기준으로 내림차순으로 key를 뽑아내기
return map.entrySet().stream().sorted(Comparator.comparingInt((Map.Entry<Integer, Integer> entry) -> entry.getValue()).reversed())
.map(Map.Entry::getKey)
.mapToInt(Integer::intValue).toArray();
}
}