1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/131127
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
필요한 물건의 배열이 주어지고, 각 물건이 필요한 개수가 담겨있는 배열이 주어진다.
할인하는 품목이 담겨있는 배열이 주어질 때
연속하는 10일동안 필요한 물건을 모두 할인받고 구매할 수 있는 경우의 수가 몇 개 있는지 구하는 문제이다.
2. 풀이
사야하는 물건의 종류와 개수가 각각의 배열로 주어진다.
그렇기 때문에 우선 물건의 종류와 개수를 매칭시켜야 한다.
나는 dict 자료구조를 이용했다. dict은 key와 value를 쌍으로 가지는 자료구조이기 때문에
품목을 key, 개수를 value로 저장해 주었다.
다른 분은 zip이라는 내장 함수를 이용한 것을 보았는데 다음과 같이 사용하셨다.
check = {}
for w, n in zip(want, number):
check[w] = n
zip() 함수를 사용하여 want와 number 리스트를 묶은 후에 for 루프를 통해 각각의 요소를 추출하여 check 딕셔너리에 할당하였다.
zip은 두 개의 리스트를 하나로 묶어줄 때 사용한다.
zip의 결과는 zip 타입의 객체이므로 우리가 알고 있는 리스트 타입으로 변환해서 값을 확인해 볼 수 있다.
name = ['merona', 'gugucon']
price = [500, 1000]
for n, p in zip(name, price):
print(n, p)
[('merona', 500), ('gugucon', 1000)]
want와 number를 묶은 후에는 discount 배열을 돌면서 모두 할인받고 구매할 수 있는 경우의 수를 확인해 줄 것이다.
discount 배열의 맨 앞에서부터 한 칸씩 뒤로 이동하면서 10칸씩 확인해주는데,
이 10칸 안에 아까 묶었던 물품과 개수가 모두 담겨있는지 확인하면 된다.
dict는 요소가 담겨있는 순서와는 관계없이 key:value 쌍이 모두 같다면 같은 dict 이다.
3. 코드
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):
c = Counter(discount[i:i+10])
if c == dic:
answer +=1
return answer
Reference:
02-5 딕셔너리 자료형
사람은 누구든지 이름 = 홍길동, 생일 = 몇 월 며칠 등과 같은 방식으로 그 사람이 가진 정보를 나타낼 수 있다. 파이썬은 영리하게도 이러한 대응 관계를 나타낼 …
wikidocs.net
07) zip과 딕셔너리
[TOC] ## 두 개의 리스트를 묶기 zip은 두 개의 리스트를 서로 묶어줄 때 사용합니다. ``` name = ['merona', 'gugucon'] price = …
wikidocs.net
'코딩 테스트 연습 > 프로그래머스' 카테고리의 다른 글
[Python]Programmers H-Index(lv2) (0) | 2024.03.17 |
---|---|
[Python]Programmers 할인 행사(lv2) (0) | 2024.03.16 |
[Python]Programmers 연속 부분 수열 합의 개수(lv2) (0) | 2024.03.12 |
[Python]Programmers 귤 고르기(lv2) - Counter (0) | 2024.03.10 |
[Python]Programmers 괄호 회전하기(lv2) (0) | 2024.03.09 |