DevYoon

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์—ฐ์†๋œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ (Python) ๋ณธ๋ฌธ

PS/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์—ฐ์†๋œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ (Python)

gimewn 2023. 4. 7. 00:20

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

๋น„๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ˆ˜์—ด์ด ์ฃผ์–ด์งˆ ๋•Œ, ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ์ฐพ์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ์กด ์ˆ˜์—ด์—์„œ ์ž„์˜์˜ ๋‘ ์ธ๋ฑ์Šค์˜ ์›์†Œ์™€ ๊ทธ ์‚ฌ์ด์˜ ์›์†Œ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์€ k์ž…๋‹ˆ๋‹ค.
  • ํ•ฉ์ด k์ธ ๋ถ€๋ถ„ ์ˆ˜์—ด์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ ๊ธธ์ด๊ฐ€ ์งง์€ ์ˆ˜์—ด์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • ๊ธธ์ด๊ฐ€ ์งง์€ ์ˆ˜์—ด์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ ์•ž์ชฝ(์‹œ์ž‘ ์ธ๋ฑ์Šค๊ฐ€ ์ž‘์€)์— ๋‚˜์˜ค๋Š” ์ˆ˜์—ด์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

์ˆ˜์—ด์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด sequence์™€ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ k๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค์™€ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ์ˆ˜์—ด์˜ ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

์ œํ•œ์‚ฌํ•ญ

 
  • 5 ≤ sequence์˜ ๊ธธ์ด ≤ 1,000,000
    • 1 ≤ sequence์˜ ์›์†Œ ≤ 1,000
    • sequence๋Š” ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • 5 ≤ k ≤ 1,000,000,000
    • k๋Š” ํ•ญ์ƒ sequence์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.

 


 

def solution(sequence, k):
    answer = []
    end = 0
    sums = 0
    min_ans = 1e9
    
    for start in range(len(sequence)):
        while end < len(sequence) and sums < k:
            sums += sequence[end]
            end += 1
        if sums == k:
            if min_ans > end-start:
                answer = [start, end-1]
            min_ans = min(min_ans, end-start)
        sums -= sequence[start]
    
    return answer

 

- ์—ฐ์†๋œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ => ๋ณด์ž๋งˆ์ž ํˆฌํฌ์ธํ„ฐ๋‹ค! ํ•˜๊ณ  ๋– ์˜ฌ๋ ธ๋˜ ๋ฌธ์ œ

- start๋ฅผ for๋ฌธ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ, ๊ฐ ์›์†Œ๋งˆ๋‹ค end๋ฅผ ํ•˜๋‚˜์”ฉ ๋Š˜๋ ค๊ฐ€๋ฉฐ ํ•ฉ์ด k๊ฐ€ ๋˜๋Š” ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•ด์ค€๋‹ค.

- ๊ธธ์ด๊ฐ€ ๊ฐ€์žฅ ์งง์œผ๋ฉด์„œ / ์‹œ์ž‘ ์›์†Œ๊ฐ€ ๊ฐ€์žฅ ์ž‘์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ธธ์ด๊ฐ€ min_ans๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ (๊ธธ์ด๊ฐ€ ๊ฐ€์žฅ ์งง์€) ์—๋งŒ answer๋ฅผ ๊ต์ฒดํ•ด์ฃผ์—ˆ๋‹ค.

- start๋Š” 0๋ถ€ํ„ฐ len(sequence)-1๊นŒ์ง€์ด๋ฏ€๋กœ, ์ž๋™์œผ๋กœ ์‹œ์ž‘ ์›์†Œ๊ฐ€ ๊ฐ€์žฅ ์ž‘๊ธฐ ๋•Œ๋ฌธ!