728x90
반응형
1. 문제 설명
2. 풀이과정
해당 문제는 단품 메뉴 2개 이상으로 구성된 가능한 코스요리를 구하는 문제이다.
코스요리를 구성하는 단품 메뉴의 개수에 따라 코스요리의 가능한 모든 조합의 결과를 구하고 해당 조합을 바탕으로 각 코스요리가 얼마나 주문되었는지 구한다.
손님 2명 이상이 주문한 메뉴 중 가장 많은 횟수로 주문된 코스요리 후보를 구한다.
각 코스요리의 개수에 따른 모든 코스요리 후보를 구했다면 해당 후보들을 오름차순으로 정렬한다.
- 조합의 결과를 combinations() 함수로 구하기 위해 해당 함수를 불러온다. from itertools import combinations
- 각 코스요리의 개수를 하나씩 불러온다. for i in course
- 각 가능한 코스요리와 그 개수를 저장할 딕셔너리를 생성한다. d = {}
- 각 손님이 주문한 단품 메뉴를 불러온다. for j in orders
- 하나의 문자열로 이루어진 단품 메뉴를 각 문자로 나누어 리스트로 저장한다. j = list(j)
- 해당 리스트를 오름차순으로 정렬한 결과에서 코스요리의 개수만큼 선택하는 모든 조합의 결과를 리스트로 추출해 각 조합의 결과를 하나씩 불러온다. for k in list(combinations(sorted(j), i))
- 만약 딕셔너리에 해당 조합이 이미 존재하면 if (k in d)
- 해당 조합의 개수를 1 증가시킨다. d[k] += 1
- 반면에 해당 조합이 처음 나오는 조합이라면 else
- 해당 조합을 딕셔너리에 새로 추가한다. d[k] = 1
- 만약 해당 딕셔너리에 저장된 조합이 1개라도 있으면 if (len(d) > 0)
- 각 조합이 나온 횟수의 최댓값을 저장한다. MAX = max(d.values())
- 만약 최댓값이 1보다 크면 (주문한 손님이 2명 이상일 때) if (MAX > 1)
- 최댓값을 value로 갖는 key를 찾아 리스트로 저장한다. li = [k for k, v in d.items() if v == MAX]
- 저장한 리스트의 결과를 하나씩 불러오며 for j in li
- 각 코스요리의 메뉴를 하나의 문자열로 저장하고 word = ''.join(j)
- 해당 코스요리가 처음 나오는 코스요리라면 if (word not in answer)
- 해당 코스요리를 추가한다. answer.append(word)
- 코스요리 후보를 모두 구했다면 오름차순으로 정렬한다. answer.sort()
반응형
3. 소스코드
from itertools import combinations
def solution(orders, course):
answer = []
for i in course:
d = {}
for j in orders:
j = list(j)
for k in list(combinations(sorted(j), i)):
if (k in d):
d[k] += 1
else:
d[k] = 1
if (len(d) > 0):
MAX = max(d.values())
if (MAX > 1):
li = [k for k, v in d.items() if v == MAX]
for j in li:
word = ''.join(j)
if (word not in answer):
answer.append(word)
answer.sort()
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 보석 쇼핑 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.17 |
---|---|
[프로그래머스] 호텔 대실 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.15 |
[프로그래머스] [3차] 방금그곡 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.13 |
[프로그래머스] 무인도 여행 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.11 |
[프로그래머스] 불량 사용자 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.04 |
[프로그래머스] 스티커 모으기(2) - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.01 |
[프로그래머스] 124 나라의 숫자 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.30 |
[프로그래머스] 연속된 부분 수열의 합 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.28 |