DevYoon

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 할인 행사 (Python) λ³Έλ¬Έ

PS/Programmers

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 할인 행사 (Python)

gimewn 2023. 2. 20. 23:56

link πŸ”— https://school.programmers.co.kr/learn/courses/30/lessons/131127

 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ 맀칭. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 맀칭 λ°›μœΌμ„Έμš”.

programmers.co.kr

 

문제 μ„€λͺ…

XYZ λ§ˆνŠΈλŠ” μΌμ •ν•œ κΈˆμ•‘μ„ μ§€λΆˆν•˜λ©΄ 10일 λ™μ•ˆ νšŒμ› μžκ²©μ„ λΆ€μ—¬ν•©λ‹ˆλ‹€. XYZ λ§ˆνŠΈμ—μ„œλŠ” νšŒμ›μ„ λŒ€μƒμœΌλ‘œ 맀일 ν•œ 가지 μ œν’ˆμ„ ν• μΈν•˜λŠ” 행사λ₯Ό ν•©λ‹ˆλ‹€. ν• μΈν•˜λŠ” μ œν’ˆμ€ ν•˜λ£¨μ— ν•˜λ‚˜μ”©λ§Œ ꡬ맀할 수 μžˆμŠ΅λ‹ˆλ‹€. μ•Œλœ°ν•œ μ •ν˜„μ΄λŠ” μžμ‹ μ΄ μ›ν•˜λŠ” μ œν’ˆκ³Ό μˆ˜λŸ‰μ΄ ν• μΈν•˜λŠ” λ‚ μ§œμ™€ 10일 μ—°μ†μœΌλ‘œ μΌμΉ˜ν•  κ²½μš°μ— λ§žμΆ°μ„œ νšŒμ›κ°€μž…μ„ ν•˜λ € ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ΄ λ°”λ‚˜λ‚˜ 3개, 사과 2개, μŒ€ 2개, 돼지고기 2개, 냄비 1개이며, XYZ λ§ˆνŠΈμ—μ„œ 15일간 νšŒμ›μ„ λŒ€μƒμœΌλ‘œ ν• μΈν•˜λŠ” μ œν’ˆμ΄ λ‚ μ§œ μˆœμ„œλŒ€λ‘œ μΉ˜ν‚¨, 사과, 사과, λ°”λ‚˜λ‚˜, μŒ€, 사과, 돼지고기, λ°”λ‚˜λ‚˜, 돼지고기, μŒ€, 냄비, λ°”λ‚˜λ‚˜, 사과, λ°”λ‚˜λ‚˜μΈ κ²½μš°μ— λŒ€ν•΄ μ•Œμ•„λ΄…μ‹œλ‹€. 첫째 λ‚ λΆ€ν„° μ—΄ν˜ κ°„μ—λŠ” 냄비가 ν• μΈν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 첫째 λ‚ μ—λŠ” νšŒμ›κ°€μž…μ„ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‘˜μ§Έ λ‚ λΆ€ν„° μ—΄ν˜ κ°„μ—λŠ” λ°”λ‚˜λ‚˜λ₯Ό μ›ν•˜λŠ” 만큼 할인ꡬ맀할 수 μ—†κΈ° λ•Œλ¬Έμ— λ‘˜μ§Έ 날에도 νšŒμ›κ°€μž…μ„ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ…‹μ§Έ λ‚ , λ„·μ§Έ λ‚ , λ‹€μ„―μ§Έ λ‚ λΆ€ν„° 각각 μ—΄ν˜μ€ μ›ν•˜λŠ” μ œν’ˆκ³Ό μˆ˜λŸ‰μ΄ μΌμΉ˜ν•˜κΈ° λ•Œλ¬Έμ— μ…‹ 쀑 ν•˜λ£¨μ— νšŒμ›κ°€μž…μ„ ν•˜λ € ν•©λ‹ˆλ‹€.

μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ„ λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄ λ°°μ—΄ want와 μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ˜ μˆ˜λŸ‰μ„ λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ λ°°μ—΄ number, XYZ λ§ˆνŠΈμ—μ„œ ν• μΈν•˜λŠ” μ œν’ˆμ„ λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄ λ°°μ—΄ discountκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, νšŒμ›λ“±λ‘μ‹œ μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ„ λͺ¨λ‘ 할인 받을 수 μžˆλŠ” νšŒμ›λ“±λ‘ λ‚ μ§œμ˜ 총 일수λ₯Ό return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜μ‹œμ˜€. κ°€λŠ₯ν•œ 날이 μ—†μœΌλ©΄ 0을 return ν•©λ‹ˆλ‹€.


μ œν•œμ‚¬ν•­
  • 1 ≤ want의 길이 = number의 길이 ≤ 10
    • 1 ≤ number의 μ›μ†Œ ≤ 10
    • number[i]λŠ” want[i]의 μˆ˜λŸ‰μ„ μ˜λ―Έν•˜λ©°, number의 μ›μ†Œμ˜ 합은 10μž…λ‹ˆλ‹€.
  • 10 ≤ discount의 길이 ≤ 100,000
  • want와 discount의 μ›μ†Œλ“€μ€ μ•ŒνŒŒλ²³ μ†Œλ¬Έμžλ‘œ 이루어진 λ¬Έμžμ—΄μž…λ‹ˆλ‹€.
    • 1 ≤ want의 μ›μ†Œμ˜ 길이, discount의 μ›μ†Œμ˜ 길이 ≤ 12

 


 

def solution(want, number, discount):
    answer = 0
    d_len = len(discount)
    w_len = len(want)
    
    for now in range(d_len - 9):
        # ν˜„μž¬ λ‚ μ§œλΆ€ν„° 10일간 ν• μΈν•˜λŠ” ν’ˆλͺ©
        product = discount[now:now + 10]
        cnt = 0
        for idx in range(w_len):
            # κ΅¬λ§€ν•˜λ €λŠ” λ¬Όν’ˆμ˜ κ°―μˆ˜μ™€ ν• μΈν•˜λŠ” κ°œμˆ˜κ°€ μΌμΉ˜ν•˜λ©΄ cnt ++
            if product.count(want[idx]) == number[idx]:
                cnt += 1
        # μΌμΉ˜ν•˜λŠ” 개수 == κ΅¬λ§€ν•˜λ €λŠ” ν’ˆλͺ© 개수 -> νšŒμ›λ“±λ‘ λ‚ μ§œ ++
        if cnt == w_len:
            answer += 1
    return answer

 

- μ²˜μŒμ— 문제λ₯Ό 잘λͺ» μ½μ–΄μ„œ μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ„ λͺ¨λ‘ 할인받아 ꡬ맀할 수 μžˆλŠ” 졜초의 λ‚ μ§œλ₯Ό 닡이라고 μƒκ°ν–ˆλ‹€. 마침 μ˜ˆμ œμ—μ„œλŠ” 닡이 λ‚˜μ™€μ„œ 문제λ₯Ό 잘λͺ» μ½μ—ˆλ‹€κ³  생각을 λͺ»ν–ˆλ‹€πŸ˜…

- 졜초의 λ‚ μ§œκ°€ μ•„λ‹ˆλΌ, μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ„ λͺ¨λ‘ 할인받아 ꡬ맀할 수 μžˆλŠ” 날을 μ„Έμ–΄ 개수λ₯Ό λ°˜ν™˜ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€!