250x250
Link
λ‚˜μ˜ GitHub Contribution κ·Έλž˜ν”„
Loading data ...
Notice
Recent Posts
Recent Comments
관리 메뉴

Data Science LAB

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level2 (할인행사) λ³Έλ¬Έ

πŸ“ Coding Test/Programmers

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level2 (할인행사)

γ…… γ…œ γ…” γ…‡ 2022. 12. 6. 18:41
728x90

1. 문제 μ„€λͺ…

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

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

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

 

 

 

 

 

2. μ œν•œ 사항

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

 

 

 

 

 

 

3. λ‚΄ 풀이

from collections import Counter
def solution(want, number, discount):
    want_dict = dict(zip(want, number))
    want_dict = sorted(want_dict.items())
    answer = 0
    for i in range(len(discount)-9):
        if sorted(Counter(discount[i:i+10]).items()) == want_dict:
            answer += 1
            
    return answer

 

1. ꡬ맀λ₯Ό μ›ν•˜λŠ” μ œν’ˆκ³Ό 개수λ₯Ό λ”•μ…”λ„ˆλ¦¬ ν˜•νƒœλ‘œ μ„ μ–Έ

2. λ”•μ…”λ„ˆλ¦¬ μ •λ ¬

3. for 문을 μ‚¬μš©ν•˜μ—¬ ν• μΈν’ˆλͺ© 리슀트의 총 개수 - 10 만큼 반볡

4. discount[i:i+10]의 μ›μ†Œλ₯Ό Count() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 카운트 ν›„ μ •λ ¬

5. λ§Œμ•½ Count() ν•¨μˆ˜λ‘œ λ°˜ν™˜λœ λ”•μ…”λ„ˆλ¦¬μ™€ ꡬ맀λ₯Ό μ›ν•˜λŠ” μ œν’ˆμ˜ λ”•μ…”λ„ˆλ¦¬κ°€ μΌμΉ˜ν•˜λ©΄ answer + 1

 

 

 

 

 

 

4. λ‹€λ₯Έ μ‚¬λžŒ 풀이

from collections import Counter
def solution(want, number, discount):
    answer = 0
    dic = {}
    for i in range(len(want)):
        dic[want[i]] = number[i]

    for i in range(len(discount)-9):
        if dic == Counter(discount[i:i+10]): 
            answer += 1

    return answer
728x90
Comments