🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 연속 λΆ€λΆ„ μˆ˜μ—΄ ν•©μ˜ 개수 (level2, python)

개발자 HOON 2022. 10. 14. 16:35

🏝 문제 μ„€λͺ…

 

μ² ν˜ΈλŠ” μˆ˜μ—΄μ„ 가지고 놀기 μ’‹μ•„ν•©λ‹ˆλ‹€. μ–΄λŠ λ‚  μ² ν˜ΈλŠ” μ–΄λ–€ μžμ—°μˆ˜λ‘œ 이루어진 μ›ν˜• μˆ˜μ—΄μ˜ μ—°μ†ν•˜λŠ” λΆ€λΆ„ μˆ˜μ—΄μ˜ ν•©μœΌλ‘œ λ§Œλ“€ 수 μžˆλŠ” μˆ˜κ°€ λͺ¨λ‘ λͺ‡ 가지인지 μ•Œμ•„λ³΄κ³  μ‹Άμ–΄μ‘ŒμŠ΅λ‹ˆλ‹€. μ›ν˜• μˆ˜μ—΄μ΄λž€ 일반적인 μˆ˜μ—΄μ—μ„œ 처음과 끝이 μ—°κ²°λœ ν˜•νƒœμ˜ μˆ˜μ—΄μ„ λ§ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μˆ˜μ—΄ [7, 9, 1, 1, 4] 둜 μ›ν˜• μˆ˜μ—΄μ„ λ§Œλ“€λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.


μ›ν˜• μˆ˜μ—΄μ€ 처음과 끝이 μ—°κ²°λ˜μ–΄ λŠκΈ°λŠ” 뢀뢄이 μ—†κΈ° λ•Œλ¬Έμ— μ—°μ†ν•˜λŠ” λΆ€λΆ„ μˆ˜μ—΄λ„ 일반적인 μˆ˜μ—΄λ³΄λ‹€ λ§Žμ•„μ§‘λ‹ˆλ‹€.
μ›ν˜• μˆ˜μ—΄μ˜ λͺ¨λ“  μ›μ†Œ elementsκ°€ μˆœμ„œλŒ€λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ›ν˜• μˆ˜μ—΄μ˜ 연속 λΆ€λΆ„ μˆ˜μ—΄ ν•©μœΌλ‘œ λ§Œλ“€ 수 μžˆλŠ” 수의 개수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.


μ œν•œμ‚¬ν•­

  • 3 ≤ elements의 길이 ≤ 1,000
  • 1 ≤ elements의 μ›μ†Œ ≤ 1,000

μž…μΆœλ ₯ 예

[7,9,1,1,4] 18

μž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예 #1


길이가 1인 연속 λΆ€λΆ„ μˆ˜μ—΄λ‘œλΆ€ν„° [1, 4, 7, 9] λ„€ κ°€μ§€μ˜ 합이 λ‚˜μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
길이가 2인 연속 λΆ€λΆ„ μˆ˜μ—΄λ‘œλΆ€ν„° [2, 5, 10, 11, 16] λ‹€μ„― κ°€μ§€μ˜ 합이 λ‚˜μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
길이가 3인 연속 λΆ€λΆ„ μˆ˜μ—΄λ‘œλΆ€ν„° [6, 11, 12, 17, 20] λ‹€μ„― κ°€μ§€μ˜ 합이 λ‚˜μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
길이가 4인 연속 λΆ€λΆ„ μˆ˜μ—΄λ‘œλΆ€ν„° [13, 15, 18, 21] λ„€ κ°€μ§€μ˜ 합이 λ‚˜μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
길이가 5인 연속 λΆ€λΆ„ μˆ˜μ—΄λ‘œλΆ€ν„° [22] ν•œ κ°€μ§€μ˜ 합이 λ‚˜μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
이듀 쀑 μ€‘λ³΅λ˜λŠ” 값을 μ œμ™Έν•˜λ©΄ λ‹€μŒκ³Ό 같은 18κ°€μ§€μ˜ μˆ˜λ“€μ„ μ–»μŠ΅λ‹ˆλ‹€.
[1, 2, 4, 5, 6, 7, 9, 10, 11, 12, 13, 15, 16, 17, 18, 20, 21, 22]


🏝 풀이 μ½”λ“œ

def solution(elements):
    N = len(elements)
    elements *= 2
    return len(set(sum(elements[j:j+n]) for j in range(N) for n in range(1, N+1)))

 

브루트포슀 λ¬Έμ œμ΄λ‹€.

각 ꡬ간을 μŠ¬λΌμ΄μ‹±ν•΄μ„œ 합을 집합에 μ‚½μž…ν•΄ 길이λ₯Ό μž¬λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆλ‹€.

 

μ—¬κΈ°μ„œ μ›ν˜•μ„ κ΅¬ν˜„ν•˜λŠ” 방식은 κ·Έλƒ₯ elements 배열을 뒀에 ν•˜λ‚˜ 더 뢙인닀.

λ‹¨μˆœνžˆ *2λ₯Ό 톡해 λ’€λ₯Ό ν™•μž₯μ‹œν‚¬ 수 μžˆλ‹€.