https://school.programmers.co.kr/learn/courses/30/lessons/131127
풀이
더보기
사실 이번 문제 풀이는 마음에 안 드는데 남들 풀이 봐도 다들 비슷하게 한 거 같음.. 어쩔 수 없는 이중반복문 문제인듯.
다만 여기서 생각해야할 건, 효율을 많이 먹지 않기 위해 (discount가 최대 10만개임) 중간에 루프를 끊어줄 수 있어야 하는게 관건인듯.
모든 것이 할인받아야 한다는 것은 다시 말해서 하나라도 기간 내에 전체 할인을 받을 수 없다면 필요가 없다는 말이다.
그래서, 10일 내의 할인 목록을 출력하고, 그 할인 목록 내에서의 수량을 count로 확인하고 갯수와 일치하지 않는다면 다음 일자의 루프를 확인한다. 이중 포문이라 어쩔수 없음.
*+ forEach, forEachIndex의 경우 coutinue와 break를 쓸 수 없다.
루프에 @blabla를 통해 이름을 부여하고, 해당 루프를 return 시키면 coutinue처럼 쓸 수 있다.
루프를 완전 종료 시키고 싶다면, 해당 루프를 run { }으로 감싼 후, run에도 이름을 부여한 후, 해당 run을 break시키면 된다.
class Solution {
fun solution(want: Array<String>, number: IntArray, discount: Array<String>): Int {
var answer: Int = 0
discount.forEachIndexed discountLoop@{ index, _ ->
var endDiscount = if (index + 10 <= discount.size) {
// 10개를 세려면 9개를 더해야함.
index + 9
} else {
discount.size - 1
}
var list = discount.slice(index .. endDiscount)
want.forEachIndexed { wantIndex, s ->
if(list.count { it == s } != number[wantIndex]) {
// 수량 안 맞으면 어차피 이 기간에 회원가입을 못함. 보자마자 할인 루프 종료
return@discountLoop
}
}
answer += 1
}
return answer
}
}
반응형
'스터디(programmers)' 카테고리의 다른 글
Java] 프로그래머스 Lv.0, 컨트롤 제트 (0) | 2023.04.21 |
---|---|
Kotlin] 프로그래머스 Lv.2, 주차 요금 계산 (0) | 2023.04.19 |
Kotlin] 프로그래머스 lv.2, JadenCase 문자열 만들기 (0) | 2023.04.05 |
Java] 프로그래머스 lv.0, 진료 순서 정하기 (0) | 2023.03.31 |
Kotlin] 프로그래머스 lv.2, 귤 고르기 (0) | 2023.03.29 |