728x90
from itertools import combinations
from collections import Counter
def solution(orders, course):
answer = []
for i, o in enumerate(orders):
orders[i] = ''.join(sorted(o))
for courseLen in course:
comb_list = []
for ord in orders:
order_list = list(ord)
comb_list += list(combinations(order_list, courseLen))
commons = Counter(comb_list).most_common()
answer += [''.join(k) for k,v in commons if commons[0][1] == v and v > 1]
return sorted(answer)
문제
https://programmers.co.kr/learn/courses/30/lessons/72411
내 풀이
from collections import defaultdict
from itertools import combinations
def solution(orders, course):
answer = []
courses = defaultdict(lambda: 0)
for i, o in enumerate(orders):
orders[i] = ''.join(sorted(o))
for courseLen in course:
for ord in orders:
orderList = list(ord)
possibleList = list(combinations(orderList, courseLen))
for c in possibleList:
courses[''.join(c)] += 1
items = courses.items()
max_count = max(items, key=lambda k: k[1])
if max_count[1] <= 1:
continue
for item in items:
if max_count[1] == item[1]:
answer.append(item[0])
courses.clear()
answer.sort()
return answer
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
solution(["ABCFG", "AC", "CDE", "ACDE", "BCFG", "ACDEH"], [2, 3, 4])
알게 된 것
1. Counter 클래스를 사용하면, Map으로 카운팅할 필요가 없어진다
2. list += list 를 하면 list가 append된다
3. 간만에 파이썬하려니 다까먹었다
4. ''.join 기억하자
5. itertools를 미리 공부해두자
6. defaultdict 의 람다식을 기억해두자 인자는 필요없다
courses = defaultdict(lambda: 0)
피드백
from itertools import combinations
from collections import Counter
def solution(orders, course):
answer = []
for i, o in enumerate(orders):
orders[i] = ''.join(sorted(o))
for courseLen in course:
comb_list = []
for ord in orders:
order_list = list(ord)
comb_list += list(combinations(order_list, courseLen))
commons = Counter(comb_list).most_common()
answer += [''.join(k) for k,v in commons if commons[0][1] == v and v > 1]
return sorted(answer)
Counter(collection).most_common() 은 key, counter tuple의 list를 리턴한다.
counter value 기준으로 내림차순 정렬된다 (그게 most_common의 정의)
sorted 는 배열에만, 문자열 자체를 정렬할땐 sorted()를 쓰자
'프로그래밍 > programmers&bj' 카테고리의 다른 글
[python] k진수에서 소수 개수 구하기 (0) | 2022.03.22 |
---|---|
[JAVA] 뉴스 클러스터링 (0) | 2022.03.18 |
[JAVA] 카카오프렌즈 컬러링북 (0) | 2022.03.06 |
[JAVA] 문자열 압축 (0) | 2022.02.21 |
[JAVA] K번째 수 (0) | 2022.02.10 |