Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- TCP/IP
- Spring
- URL
- reflection
- CPU
- Queue
- dns
- Split
- 크기가 작은 부분 문자열
- 2차원 배열 출력
- annotation
- 가장 가까운 단어
- 문자열 내마음대로 정렬하기
- deque
- stack
- green thread
- IO bound
- 십진수 이진수 전환
- process
- port
- DICTIONARY
- 동시성문제
- 문자열
- http
- CPU bound
- java
- 코딩테스트
- frontPattern
- springMVC
- 프로그래머스
Archives
- Today
- Total
아무나개발하자
할인 행사 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/131127
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
"""
want
{"바나나" : 3}
{"사과" : 2}
{"쌀" : 2}
{"돼지고기" : 2}
{"냄비" : 1}
1일 : 치킨, 사과, 사과, 바나나, 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀
2일 : 사과, 사과, 바나나, 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀, 냄비
3일 : 사과, 바나나, 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀, 냄비, 바나나
4일 : 바나나, 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀, 냄비, 바나나, 사과
5일 : 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀, 냄비, 바나나, 사과, 바나나
0-9까지는 queue에 넣어두고, 10-len(discount)는 리스트에 넣어서 한개씩 추가하기
<문제 해결 방법>
1. want와 number를 통해 user_want라는 dictionary를 만든다.
2. discount를 10개씩 자르는 discount_queue를 생성, 자르고 나머지를 담은 append_list생성
3. answer은 일단 모든 경우의 수가 성공할 수 있다고 가정하고, 안되면 -1 하는 방식으로 유도 (왜냐하면 조건이 만족 안하면 -1하고 break하면됨)
4. 첫번째는 10개로 짤린 discount_queue에서 count를 한다 (조건 만족하지 않으면 -1)
5. 두번째서 부터는 discount_queue를 popleft, append(append_list)를 하면서 discount_queue를 생성해서 첫번째 행위를 반복
"""
from collections import deque
def solution(want, number, discount):
answer = 0
discount_queue = deque()
append_list = []
user_want = {}
for i in range(len(want)):
user_want[want[i]] = number[i]
for i in range(len(discount)):
if (i < 10):
discount_queue.append(discount[i])
else:
append_list.append(discount[i])
"""
다 만족해서 +1 하는것보다 일단 다 만족한다고 가정해서 다 더하고, 하나라도 만족하지 않으면 -1하는게 더 편함
"""
answer = len(append_list) + 1
for key, value in user_want.items():
if (discount_queue.count(key) < value):
answer -= 1
break
for elem in append_list:
discount_queue.popleft()
discount_queue.append(elem)
for key, value in user_want.items():
if (discount_queue.count(key) < value):
answer -= 1
break
return answer
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/131127