😎풀이

  1. code 확인
    1-1. 빈 값 안됨
    1-2. 영문 대/소문자 및 정수와 _외 안됨
  2. businessLine 확인
    2-1. electronics, grocery, pharmacy, restaurant 외 안됨
  3. isActive는 true 여야 함
  4. 해당되는 활성화 티켓을 이전 언급한 businessLine 순서로 오름차 순 정렬 즉 electonics ~ restaurant
  5. 쿠폰 code를 사전 순 오름차 순 정렬
  6. 정렬된 활성화 티켓 목록 반환
function validateCoupons(code: string[], businessLine: string[], isActive: boolean[]): string[] {
    const validBusinessLine = ["electronics", "grocery", "pharmacy", "restaurant"]
    const n = code.length
    const coupons = []
    for(let i = 0; i < n; i++) {
        const curCode = code[i]
        if(!curCode) continue
        if(curCode.match(/[^\w\d_]/g)) continue
        const curBusinessLine = businessLine[i]
        if(validBusinessLine.indexOf(curBusinessLine) === -1) continue
        const curIsActive = isActive[i]
        if(!curIsActive) continue
        coupons.push({
            code: curCode,
            businessLine: curBusinessLine,
        })
    }
    const sortedCoupons = coupons.toSorted(({ code: aCode, businessLine: aBusinessLine }, { code: bCode, businessLine: bBusinessLine }) => {
        const aBusinessLineIdx = validBusinessLine.indexOf(aBusinessLine)
        const bBusinessLineIdx = validBusinessLine.indexOf(bBusinessLine)
        if(aBusinessLineIdx !== bBusinessLineIdx) return aBusinessLineIdx - bBusinessLineIdx
        if(aCode > bCode) return 1
        else if(aCode === bCode) return 0
        else return -1
    })
    return sortedCoupons.map(coupon => coupon.code)
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글