728x90
https://school.programmers.co.kr/learn/courses/30/lessons/131127
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
아... 왤케 문제 글이 길면 읽기 싫지...괜히 이해 더 안 가는 것 같은 착각. 이 문제가 그랬다..
막상 생각보다 쉬운 문제라 10분 컷 했나..
접근법
0. number의 합은 항상 10이고 항상 연속 10일이다.
1. want 속 물품들과 number 들 간의 pair를 dictionary 로 만들어 준다.
2. for 문으로 discount 중 처음부터 10일씩 잘라가며 1에서 만든 dictionary 를 모두 구매할 수 있는지 확인
3. 물품이 모두 나왔다면 dictionary value 들은 모두 0 이어야하기 때문에 0인 날들만 세기
내 코드
def solution(want, number, discount):
answer = 0
want_dict = {}
for i in range(len(discount)-9):
for w, n in zip(want, number):
want_dict[w] = n
for dis in discount[i:i+10]:
if dis in want_dict and want_dict[dis] > 0:
want_dict[dis] -= 1
if set(want_dict.values()) == {0}:
answer+=1
return answer
만든 dictionary에서 소거법으로 -1 씩 했기 때문에 이중 for문으로 새로운 날이 되면 다시 dictionary를 만들어줘야했다.
다른 풀이
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
Counter 를 사용해서 소거법으로 하지 않고, 내가 만든 딕셔너리랑 같은지 확인하는 방식으로 계산.
Counter 의 존재를 좀 더 활용하고 싶은 마음에 가져온 풀이
'Python > CoTe' 카테고리의 다른 글
[프로그래머스] [3차] 방금그곡 - 파이썬 (0) | 2024.02.06 |
---|---|
[프로그래머스] level2 스킬트리 - 파이썬 (0) | 2024.01.30 |
[프로그래머스] level2 - 두 큐 합 같게 만들기 (0) | 2024.01.25 |
[programmers] 공원 산책 - 파이썬 (0) | 2024.01.24 |
[프로그래머스] [1차] 프렌즈 4블록 python (0) | 2023.12.18 |