programmers.co.kr/learn/courses/30/lessons/72411
문제를 이해하는 것부터 나에게 난제로 다가왔다.
글을 읽을 수록 어떻게 하라는 건지 감이 잡히지 않아 난감해 하고 있었다.
하지만 문과 친구에게 설명을 해달라고 부탁하여 코드를 짤 순서를 정했다.
주어진 코스의 갯수에 맞는 경우의 수를 구하고, 많이 시키는 메뉴를 가져온다
처음 짤때 orders를 리스트로 먼저 만들기 위해 for문을 돌렸으나 모든 orders에서 course의 갯수를 가져오기에 상당히 많은
for문과 변수가 필요하다고 느껴
course를 반복문으로 돌리는 것을 먼저 진행하였다.
모든 경우의 수를 돌리는데 어떻게 하지 라고 생각했을 때 구글 찬스를 쓰니 경우의 수를 만들어주는 Combination이라는 함수를 발견하였다.
진심 반복문 계속 돌릴뻔.. 컴퓨터 박살날 뻔했다.
def solution(orders, course):
from itertools import combinations
from collections import Counter
result_list =[]
answer =[]
for combi_number in course:
# course마다 비교해보기
# print(combi_number)
combi_list=[]
for order in orders:
# print('order : ',sorted(list(order)))
# course의 가능성조합 모두 가져오기
for combi in combinations(sorted(list(order)),combi_number):
combi_list.append(combi)
# print("모든 조합 : ", combi_list)
combi_cnt = Counter(combi_list).most_common()
# print("cnt 세기 : ",combi_cnt)
# max값과 같은 것들을 result_list에 넣자
for value,cnt in combi_cnt:
# print(cnt,value)
if cnt > 1 and cnt == combi_cnt[0][1]:
# print("최종",value)
#리스트에 넣기
result_list.append(value)
# 문자처리해주기
for i in sorted(result_list):
answer.append("".join(i))
# print(answer)
return answer
풀이 후
- Combination함수에 대해 알 수 있었다.
2021.05.06 - [분류 전체보기] - [ Python] 겹치지 않는 정렬하기 쉬운 combination
- 난 아직도 문맹인가보다 조금 더 글을 이해할 수 있도록 노력해 보자
- 무엇을 먼저 처리하냐에 따라 코드가 간결해질 수도 복잡해질 수도 있음을 알게됨
- 이유를 모르겠지만 combination을 사용했을 때 sorted로 주어지는 리스트를 정렬해 주는것이 더 깔끔하게 넘어가는 사실을 알았음
정렬을 알아서 해주는 줄 알았다.
[coding_test]소수 만들기 (0) | 2021.05.08 |
---|---|
[coding_test] 순위 검색 (0) | 2021.05.07 |
[coding_test] 신규아이디 추천 (0) | 2021.05.06 |
[coding_test] 키패드 누르기 (0) | 2021.05.06 |
[coding_test] 완주하지 못한 선수 (0) | 2021.04.22 |