본문 바로가기
코딩테스트/코딩테스트 문제

코딩테스트 준비 - 프로그래머스:메뉴 리뉴얼 풀이/Counter,combinations (파이썬)

by 공부가싫다가도좋아 2021. 7. 2.
반응형

프로그래머스: 메뉴 리뉴얼 풀이


Counter에 관한 포스팅

2021.06.02 - [(Python)파이썬/(Python)파이썬 문법] - 파이썬 - 리스트 원소 개수 구하기/collections모듈의 Counter클래스 활용 예제

 

파이썬 - 리스트 원소 개수 구하기/collections모듈의 Counter클래스 활용 예제

collections모듈의 Counter클래스 Counter클래스 활용 from collections import Counter arr=[1,2,3,3,6,2,1,4,4,4,5,5,5] cnt = Counter(arr) print("Counter(arr) =",cnt) #Counter(arr) = Counter({4: 3, 5: 3,..

eunhee-programming.tistory.com

 

combinations에 관한 포스팅

2021.06.18 - [(Python)파이썬/(Python)파이썬 문법] - (파이썬) 리스트 요소 조합하기/ permutations & combinations

 

(파이썬) 리스트 요소 조합하기/ permutations & combinations

리스트 요소 조합하기 예를들어 arr= [1,2,3,4]가 있을 때, 리스트 안의 숫자들을 여러가지 형태로 조합하고 싶을때가 있습니다. 그럴때 사용하는 두 가지 방법이 있습니다. 방법1: 순서 상관 있는

eunhee-programming.tistory.com


문제풀러가기

https://programmers.co.kr/learn/courses/30/lessons/72411?language=python3 

 

코딩테스트 연습 - 메뉴 리뉴얼

레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서

programmers.co.kr


문제 분석

1. 문자열중, 공통된 문자를 찾는 문제이다.

2. course 리스트에 몇개씩 조합하면 되는지, 숫자가 있으므로 course를 활용하여 조합한다.


코드

from collections import Counter
from itertools import combinations
def solution(orders, course):
    result=[]
    for i in course:
        rs=[]
        for j in orders:
            num = combinations(sorted(j),i)
            rs+=num
        count = Counter(rs)
        if count:
            max_count=max(list(count.values()))
            if max_count>=2:
                for key,value in count.items():
                    if value==max_count:
                        result.append(''.join(key))
    result.sort()
    return result

*이 코드는 다른 분이 짠 코드를 참고하여 작성한 코드입니다.


 

코드 풀이

 

from collections import Counter
from itertools import combinations
def solution(orders, course):
    result=[]
    for i in course: #i개씩 문자를 조합함 
        rs=[]
        for j in orders:
            num = combinations(sorted(j),i) #조합하기 전에 j문자열 정렬을 해줌.
            rs+=num #rs안에 조합한 문자들을 넣어줌
        count = Counter(rs) # Counter을 통해, 똑같은 조합결과가 몇개 있는지 세줌
        if count: # Counter에 아무것도 없으면 패스, 있을때 if문 실행
            max_count=max(list(count.values())) #Counter안의 값중 제일 큰 값만
            if max_count>=2: #제일 큰 값이 2보다 작으면 패스, 2보다 크면 if문 실행
                for key,value in count.items(): #Counter(list).items()는 키와 값의 한쌍
                    if value==max_count:
                        result.append(''.join(key))
    result.sort()
    return result

<잡담+배운점>

combinations를 쓴다는 것까지는 생각을 했지만, 

Counter이 해시맵과 비슷하게 items()를 쓰고, key와 value값을 사용한다는 것은 생각을 못했다...!!!

반응형

댓글