문제
https://school.programmers.co.kr/learn/courses/30/lessons/131127
파이썬
- discount를 10개씩 잘라서 want의 개수만큼 있는지 비교
def solution(want, number, discount):
answer = 0
for i in range(len(discount) - len(want)):
bucket = discount[i:i + 10] # discount를 10개씩 bucket에 담아 확인
index, cnt = 0, 0 # number의 index, 과일이 있으면 cnt + 1
num = number[index]
while index <= len(want): # bucekt 확인
if num > 0: # 과일이 number의 개수만큼 있는지 확인
if want[index] in bucket:
bucket.remove(want[index])
cnt += 1
num -= 1
else:
break
else:
index += 1
if index < len(number):
num = number[index]
if cnt == sum(number): # 모든 과일이 있는지 확인
answer += 1
return answer
자바스크립트
function solution(want, number, discount) {
// 버킷 해쉬 생성
let bucket = {}
for (let i = 0; i < want.length; i++) {
bucket[want[i]] = number[i]
}
let answer = 0
for (let i = 0; i <= discount.length - 10; i++) {
let copyBucket = JSON.parse(JSON.stringify(bucket)) // 객체 깊은 복사
let cnt = 10
// 10개씩 확인
for (let j = 0; j < 10; j++) {
if (copyBucket[discount[i + j]]) { // 현재 상품이 있는 경우에만
copyBucket[discount[i + j]] -= 1
if (copyBucket[discount[i + j]] >= 0) { // 상품을 더 구입하는 경우에는 카운트 하지 않음
cnt -= 1
}
}
}
if (cnt === 0) {
answer += 1
}
}
return answer === 0 ? 0 : answer;
}
'PS (Problem Solving) > Programmers' 카테고리의 다른 글
[프로그래머스] 두 개 뽑아서 더하기 - 파이썬, 자바스크립트 (0) | 2023.01.16 |
---|---|
[프로그래머스] 124 나라의 숫자 - 파이썬 (0) | 2023.01.10 |
[프로그래머스] 이상한 문자 만들기 - 파이썬 (0) | 2023.01.02 |
[프로그래머스] 거리두기 확인하기 - 파이썬 (0) | 2022.12.23 |
[프로그래머스] 혼자 놀기의 달인 - 파이썬 (0) | 2022.12.19 |