728x90
https://school.programmers.co.kr/learn/courses/30/lessons/131127
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
1. 구매할 목록을 wantMap 에 저장한다.
2. discount 크기까지 매일 날짜가 바뀌는 것 간주하고 탐색 한다.
3. 구매할 물품의 목록(wantMap) 이 날짜가 변경되면 초기 저장값으로 되어야 하므로 또 다른 map 을 선언하여 copy 하여 사용한다.
4. 시작 날짜(i) 부터 10일간 탐색한다. 단, 탐색 index 가 discount 크기와 같을 경우 탐색을 종료한다.
5. 4번 과정 완료 후 map 의 값 중에 양수가 있으면 구매를 다 못했다는 의미이므로 구매를 완료했는 지 여부를 확인하는 result 를 false 로 업데이트 한다.
6. result 가 true 일 경우 구매를 완료 했으므로 answer 값을 증가 한다.
코드
class Solution {
fun solution(want: Array<String>, number: IntArray, discount: Array<String>): Int {
var answer: Int = 0
// 구매할 목록을 Map 에 저장한다.
val wantMap = mutableMapOf<String, Int>()
for (i in 0 until want.size) {
wantMap[want[i]] = number[i]
}
// discount 크기까지 매일 날짜가 바뀌는 것으로 탐색 한다.
for (i in 0 until discount.size) {
//println("wantMap >>> $wantMap")
// 구매할 물품의 목록(wantMap) 이 날짜가 변경되면
// 초기 저장값으로 되어야 하므로 또 다르 map 을 선언하여 copy 하여 사용한다.
val map = mutableMapOf<String, Int>()
map.putAll(wantMap)
//println("map >>> $map")
// 시작 날짜(i) 부터 10일간 탐색한다.
// 단 탐색 index 가 discount 크기와 같을 경우 탐색을 종료한다.
for (j in i until (i + 10)) {
if (j == discount.size) break
map[discount[j]]?.let { m ->
if (map.containsKey(discount[j])) {
map[discount[j]] = m - 1
}
}
}
//println("map >>> $map")
var result = true
// map 의 값 중에 양수가 있으면 구매를 다 못했다는 의미이므로
// 구매를 완료했는 지 여부를 확인하는 result 를 false 로 업데이트 한다.
map.values.forEach { v ->
if (v > 0) result = false
}
// result 가 true 일 경우 answer 값을 증가 한다.
if (result) answer++
}
return answer
}
}
728x90
'알고리즘(w.KOTLIN) > 탐색' 카테고리의 다른 글
[백준][1748][KOTLIN] 수 이어 쓰기1 (0) | 2023.01.19 |
---|---|
[백준][9095][KOTLIN] 1, 2, 3 더하기 (0) | 2023.01.19 |
[백준][2309][KOTLIN] 일곱 난쟁이 (0) | 2023.01.12 |
[알고리즘][KOTLIN]연속 부분 수열 합의 개수 (0) | 2022.12.03 |
[알고리즘][KOTLIN] 점찍기 (2) | 2022.12.02 |