https://school.programmers.co.kr/learn/courses/30/lessons/131127
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
성능이 좋은 코드는 아닌것 같지만 ..
우선 map 을 이용해서 행사 상품 이름과 사려는 갯수를 넣었다.
그리고 10개씩 상품과 사려는 갯수가 할인품목과 일치해야하기 때문에 left 와 right 를 10 이 차이나게 한 상태로 이동 시키
고 위 범위를 이용하여 만들어낸 배열에서 map 에 저장된 key의 품목이 있는지 체크하고 있다면 갯수를 -1 해준다.
이렇게 진행하면서 map 의 모든 key 의 value 가 0 이하가 되면 모든 물건을 할인된 상태로 구입 했다는 뜻이고
즉, 가입을 할 수 있는 날이 되는 것이니 answer 의 값을 증가시켜준다.
그리고 다음날로 옮겨서 또 10개의 사이즈로 배열을 뽑아내고 비교를 반복한다.
그렇게 해서 right 가 할인품목 리스트의 마지막에 닿으면 종료하면 된다.
그럼 최종적으로 조건을 만족하는 가입 날짜의 갯수가 나온다.
class Solution {
fun solution(want: Array<String>, number: IntArray, discount: Array<String>): Int {
var answer: Int = 0
var map = HashMap<String,Int>()
for(i in 0 until want.size){
map.put(want[i], number[i])
}
var left = 0
var right = 10
while(right <= discount.size){
var tempMap = map.toMutableMap()
discount.copyOfRange(left,right).forEach{ item->
tempMap.get(item)?.let{
tempMap.put(item, it-1)
}
}
if(tempMap.values.all { it <= 0 }){
answer++
}
left++
right++
}
return answer
}
}
반응형
'알고리즘' 카테고리의 다른 글
프로그래머스 - 인사고과 (0) | 2024.08.28 |
---|---|
프로그래머스 - 연속 펄스 부분 수열의 합 (3) | 2024.08.28 |
프로그래머스 - 모음사전 (0) | 2024.08.28 |
프로그래머스 - 피로도 (0) | 2024.08.27 |
프로그래머스 - 숫자 짝꿍 (0) | 2024.08.27 |
프로그래머스 - 혼자 놀기의 달인 (0) | 2024.08.26 |
프로그래머스 - 연속 부분 수열 합의 개수 (0) | 2024.08.26 |
프로그래머스 - 택배상자 (0) | 2024.08.25 |