출처: 프로그래머, https://school.programmers.co.kr/learn/courses/30/lessons/64065
프로그램 제작자
코드 중심 개발자를 고용하십시오. 배치 기반 위치 매칭. 프로그래머의 개발자별 프로필에 가입하고 기술 호환성이 좋은 회사와 연결하십시오.
Programmer.co.kr
더보기
설명
# string으로 들어오기 때문에 먼저 int의 집합으로 만들어줘야한다.
# 당장은 효율적으로 하는 방법이 떠오르지 않기 떄문에 무식하게 해보자
# 각 집합으로 만들었다면, 길이순으로 정렬한다
# 길이가 작은 것부터 기존과 여집합을 구하여 answer에 차례대로 쌓는다.
def solution(s):
answer = ()
num_list = ()
use_num_set = set()
for num_string in s(2:len(s) - 2).split('},{'):
num_list.append(set(map(int, num_string.split(','))))
num_list.sort(key = lambda x: len(x))
for num_set in num_list:
left_element = ((num_set | use_num_set) - (num_set & use_num_set)).pop()
use_num_set.add(left_element)
answer.append(left_element)
return answer
내가 배운 것
더 나은 솔루션
조금 더 생각해보면 좋은 해결책이 있습니다.
마지막으로 set-list는 튜플의 앞쪽부터 하나씩 포함하여 순서가 무작위인 배열입니다.
들어오는 입력에서 모든 숫자가 추출되면 빈도가 가장 높은 숫자가 먼저 나옵니다.
다음으로 가장 흔한 숫자는 두 번째, 세 번째입니다.
문자열에서 숫자를 추출하고 그 숫자를 세어 가장 큰 숫자 순서대로 목록에 입력하면 정답입니다.
import re
from collections import Counter
def solution(s):
#정규 표현식을 통해 연속된 숫자를 모두 추출하고, Counter를 통해 각 숫자의 개수를 센다.
p = Counter(re.findall('\d+', s))
#Counter를 items 함수를 통해 iterate할 수 있게 만들고 list로 만든 후 빈도에 따라 정렬한다.
#그 후 숫자만 가져와 숫자형으로 만들어 return 한다.
return list(map(int, (k for k, v in sorted(list(p.items()), key = lambda x: -x(1)))))
GitHub
GitHub – bh2980/algorithm problem: 알고리즘 솔루션 트레이스
알고리즘 솔루션 추적. GitHub에서 계정을 생성하여 bh2980/Algorithm 이슈 개발에 기여하십시오.
github.com