본문 바로가기
알고리즘

[Python3] 프로그래머스 Level2-할인행사

by Rudy 2022. 10. 12.

https://school.programmers.co.kr/learn/courses/30/lessons/131127

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

코드

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):
        dic2={}
        for j in range(i,i+10):
            if discount[j] in dic2:
                dic2[discount[j]]+=1
            else:
                dic2[discount[j]]=1
        #print(dic2)
        for k,v in dic2.items():
            if k not in dic:
                break
            if dic[k]!=v:
                break
        else:
            answer+=1
                
    return answer
  1. 먼저 딕셔너리로 원하는 물품:number로 정리한다. 그러면 내가 열흘 간 사야하는 물품이 전부 담길 것이다.
  2. discount의 길이-9만큼 루프를 돌아야 하는데, 그 이유는 인덱스 에러 때문이다. 열흘 간만 확인하면 되기 때문에 전체 길이에서 마지막 열흘을 확인할 수 있는 곳까지만 확인해주면 된다.
  3. 내부 루프는 i부터 i+10까지 확인한다. 딕셔너리2는 지금으로부터 열흘 간 살 수 있는 물품을 정리해줄 것이다. 만약 딕셔너리2에 물품이 없으면 정의해주면 되고, 물품이 이미 있으면 1을 추가한다.
  4. 내부 루프가 끝난 후, 딕셔너리2만큼 루프돌면서 딕셔너리2에 담긴 물품이 내가 사야하는 물품이 아닐 경우, 루프를 중단한다. 또한, 내가 사야하는 물품의 갯수와 맞지 않을 때도 루프를 중단한다.
  5. 아무 이상없이 포문을 다 돌았으면 answer에 1을 더해준다.

댓글