728x90
728x90
아래의 문제는 카카오 채용 코딩테스트 내용이며 코드는 직접 푼 내용입니다.
메뉴리뉴얼
문제상황
요구사항
각 손님들이 주문한 단품메뉴들이 문자열 형식으로 담긴 배열 orders,
"스카피"가 추가하고 싶어하는 코스요리를 구성하는 단품메뉴들의 갯수가 담긴 배열 course가 매개변수로 주어질 때, "스카피"가 새로 추가하게 될 코스요리의 메뉴 구성을
문자열 형태로 배열에 담아 return 하도록 solution 함수를 완성해 주세요.
제한사항
- orders 배열의 크기는 2 이상 20 이하입니다.
- orders 배열의 각 원소는 크기가 2 이상 10 이하인 문자열입니다.
- 각 문자열은 알파벳 대문자로만 이루어져 있습니다.
- 각 문자열에는 같은 알파벳이 중복해서 들어있지 않습니다.
- course 배열의 크기는 1 이상 10 이하입니다.
- course 배열의 각 원소는 2 이상 10 이하인 자연수가 오름차순으로 정렬되어 있습니다.
- course 배열에는 같은 값이 중복해서 들어있지 않습니다.
- 정답은 각 코스요리 메뉴의 구성을 문자열 형식으로 배열에 담아 사전 순으로 오름차순 정렬해서 return 해주세요.
- 배열의 각 원소에 저장된 문자열 또한 알파벳 오름차순으로 정렬되어야 합니다.
- 만약 가장 많이 함께 주문된 메뉴 구성이 여러 개라면, 모두 배열에 담아 return 하면 됩니다.
- orders와 course 매개변수는 return 하는 배열의 길이가 1 이상이 되도록 주어집니다.
입출력
풀이과정
구현보다 문제를 이해하기하 어려웠다.
처음엔 길이를 기준으로 일치하는 문자열을 찾으려고 했다.
예를 들면, 요리2개코스일경우 orders에서 길이가2개인거뽑고, 얘네랑 일치하는 문자열이 또 orders에서 검색하려고..
하지만 너무 시간이 오래걸리는 것 같았다. 길이를 확인하려고 배열을 검사하고, 또 일치하는지 검사해야하니..
결국 길이로 문자열을 찾는게 아니라 길이에 해당하는 만큼 조합의 수를 뽑는방법으로 변경했다.
예를 들면, 요리2개코스일경우 전체 orders들에 대해서 모두 2개씩 뽑는 것이다.
2021.05.26 - [Python] 파이썬 순열(permutations )과 조합(combinations)
그리고 그 중에서 몇개가 있는지를 count하면, 주문된 단품메뉴 조합의 갯수가 된다.
결국 최종적으로 주문된 단품메뉴 조합의 갯수의 max를 찾고, 그에 해당하는 메뉴들을 리턴한다.
결과
내가 푼 정답코드결과
from itertools import combinations
from collections import Counter
def solution(orders,course):
answer=[]
for c in course:#c개 코스
#c개로 뽑을 수 있는 메뉴조합
order_combi=[]
for order in orders:
for combi in combinations(order,c):
order_combi.append(''.join(sorted(combi)))
print(str(c)+"개 코스")
print(order_combi)
#['AB', 'AC', 'AF', 'AG', 'BC', 'BF', 'BG', 'CF', 'CG'
#메뉴구성후보
order_count=Counter(order_combi).most_common()
print(order_count)
#메뉴조합,찾은횟수
#[('AC', 4), ('CD', 3), ('CE', 3), ('DE', 3),
#count가 가장 큰거만 result
#count의 max 구하고
max=0
for oc in order_count:
if oc[1]>=max:
max=oc[1]
#max에 해당하는 메뉴구성 추출
#단 메뉴구성이1개일 경우 제외
for oc in order_count:
if oc[1]>=max and oc[1]!=1:
answer.append(oc[0])
return sorted(answer)
또는 다른방식으로 푼 코드
배운점
- Counter(배열).most_common() : {key:발견된횟수}를 저장하는 dict와 같다.
- 콤비네이션 : 순서없이 n개를 뽑는 경우의 수
참고
참고한 블로그 링크
728x90
반응형
'코딩 테스트' 카테고리의 다른 글
[LeetCode] 438. Find All Anagrams in a String -슬라이딩 윈도우 (0) | 2021.07.29 |
---|---|
[백준][파이썬]21921.블로그 -슬라이딩윈도우 (0) | 2021.07.29 |
[백준][파이썬]11659.구간합구하기4 - 구간합(접두사합) (0) | 2021.07.28 |
[카카오][Python] 키패드 누르기 (0) | 2021.07.09 |
[카카오][Python] 숫자문자열과 영단어 (0) | 2021.07.09 |
[카카오][Python] 문자열압축 (0) | 2021.07.08 |