[PS, Algorithm] - 할인행사 (프로그래머스 연습문제, LEVEL 2)

조재현·2022년 11월 26일
0

📒문제


📌풀이

from collections import Counter
from collections import defaultdict

def solution(want, number, discount):
    d = defaultdict(int)
    for key, value in zip(want, number):
        d[key] = value
    
    cnt = 0
    for i in range(len(discount)-9):
        T = discount[i:i+10]
        T_count = Counter(T)
        
        if len(T_count) != len(d): continue
        
        flag = True
        for key in want:
            if d[key] != T_count[key]: 
                flag = False
                break
        if flag == True:
            cnt+=1
            
    if cnt: return cnt 
    else: return 0

역시나 Counter함수를 이용하는 것이라고 생각했고, 어렵지 않게 문제를 해결했다. 10일 단위로 끊은 배열의 Counter 값과 want-number쌍으로 만든 데이터 값을 서로 비교해 같다면 result 값을 1 올려준다.


📌모범 풀이

from collections import Counter
def solution(want, number, discount):
    answer = 0
    dic = {}
    for i in range(len(want)):
        dic[want[i]] = number[i]
    for i in range(len(discount)-9):
        if dic == Counter(discount[i:i+10]): 
            answer += 1
    return answer

알게 된 사실

if dic == Counter(discount[i:i+10]): 

dict형과 Counter형이 반환하는 데이터 형식이 서로 달라 이런식의 비교는 불가능할 줄 알았는데 가능했다. 잘 알아두어야 겠다.

profile
꿈이 많은 개발자 지망생

0개의 댓글