[TIL_Carrotww] 116 - 23/06/01

์œ ํ˜•์„ยท2023๋…„ 6์›” 4์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
131/138
post-thumbnail

๐Ÿ“Carrotww์˜ ์ฝ”๋”ฉ ๊ธฐ๋ก์žฅ

๐Ÿงฒ python algorithm

๐Ÿ” ๋ฐฑ์ค€ ์†Œ์ˆ˜์˜ ์—ฐ์† ํ•ฉ

๋ฌธ์ œ๋ฅผ ์ฝ์–ด๋ณด๋ฉด ์ผ๋‹จ ์ฃผ์–ด์ค€ ๊ฐ’๊นŒ์ง€์˜ ์†Œ์ˆ˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์•Œ๊ฒƒ์ด๋‹ค.
N์ด ์ฃผ์–ด์กŒ์„๋•Œ ํ•ด๋‹น ๊ฐ’๊นŒ์ง€ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์—๋Œ€ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์—๋ผ์Šคํ† ํ…Œ๋„ค์Šค์˜ ์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

def prime_list(n):
    is_prime = [True] * (n + 1)
    is_prime[0], is_prime[1] = False, False

    for i in range(2, int(n ** 0.5) + 1):
        if is_prime[i]:
            for j in range(i*i, n+1, i):
                is_prime[j] = False

    return [x for x in range(n+1) if is_prime[x]]

์ผ๋‹จ ์ด๋ ‡๊ฒŒ n์ด ์ฃผ์–ด์ง€๋ฉด ํ•ด๋‹น ๊ฐ’๊นŒ์ง€์˜ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ–ˆ๋‹ค.
๋‹ค์Œ ์†Œ์ˆ˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ด๋‹น ๊ธธ์ด๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•ด๋‹น ์ž๋ฆฟ์ˆ˜ ๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
dp๋ฅผ ํ‘ผ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ด๊ฐ€ ์‰ฌ์šธ ๊ฒƒ์ด๋‹ค.

  • ์ „์ฒด ํ’€์ด
def prime_list(n):
    is_prime = [True] * (n + 1)
    is_prime[0], is_prime[1] = False, False

    for i in range(2, int(n ** 0.5) + 1):
        if is_prime[i]:
            for j in range(i*i, n+1, i):
                is_prime[j] = False

    return [x for x in range(n+1) if is_prime[x]]

def solve():
    import sys
    num = int(sys.stdin.readline())
    primes = prime_list(num)
    sum_list = [0] * (len(primes) + 1)
    cnt = 0

    for i in range(1, len(primes) + 1):
        sum_list[i] = sum_list[i-1] + primes[i-1]

    for i in range(len(primes)):
        for j in range(i+1, len(primes)+1):
            if sum_list[j] - sum_list[i] == num:
                cnt += 1
            elif sum_list[j] - sum_list[i] > num:
                break

    print(cnt)

if __name__ == "__main__":
    solve()

๊ณจ3 ๋ฌธ์ œ์ธ๋ฐ ์†”์งํžˆ ์ข€ ๊นŒ๋‹ค๋กœ์› ๋‹ค ์‹œ๊ฐ„๋ณต์žก๋„๋„ ๋งŽ์ด ์‹ ๊ฒฝ์จ์•ผํ•˜๊ณ ...

๋‹ค๋ฅธ ํ’€์ด๋„ ์žˆ๋‹ค
๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ ํˆฌ ํฌ์ธํ„ฐ๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

  • ํˆฌ ํฌ์ธํ„ฐ
def solve():
    import sys
    num = int(sys.stdin.readline())
    if num == 1:
        print(0)
        return
    primes = prime_list(num)

    total = primes[0]
    start, end = 0, 0
    result = 0
    while end <= len(primes):
        if total == num:
            result += 1
            end += 1
            if end < len(primes):
                total += primes[end]
            else:
                break
        elif total < num:
            end += 1
            if end < len(primes):
                total += primes[end]
            else:
                break
        else:
            total -= primes[start]
            start += 1

    print(result)

if __name__ == "__main__":
    solve()

์ด๋ ‡๊ฒŒ ํ’€๋ฉด ์กฐ๊ธˆ ๋” ์‹œ๊ฐ„์ด ๋น ๋ฅด๊ฒŒ ๋‚˜์˜จ๋‹ค.
๊ทธ๋ฆฌ๊ณ  else: ๋ถ€๋ถ„์—์„œ start += 1์„ ํ•˜์—ฌ end์™€ ๊ฐ™์•„์ง€๋ฉด ์–ด๋–กํ•˜์ง€๋ผ๊ณ  ์ƒ๊ฐ์„ ํ•˜์˜€๋Š”๋ฐ ํ•ด๋‹น ๋ฌธ์ œ์—์„œ else ๋ฌธ์ด ์‹คํ–‰๋๋‹ค๋Š” ๊ฒƒ์€ ์ฃผ์–ด์ง„ ์ˆ˜๋ณด๋‹ค total ๊ฐ’์ด ๋” ํฌ๋‹ค๋Š” ์˜๋ฏธ์ธ๋ฐ ์ฃผ์–ด์ง„ ๊ฐ’๋“ค์€ ์ตœ์†Œ 2๊ฐœ ์ด์ƒ์„ ํ•ฉ์ณ์•ผ total๋ณด๋‹ค ์ปค์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ start += 1 ํ›„์— start๊ฐ€ end์™€ ๊ฐ™์•„์งˆ ๊ฒƒ์— ๋Œ€ํ•œ if๋ฌธ์€ ์•ˆ์จ๋„ ๋œ๋‹ค.

5์›”๋‹ฌ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์—„์ฒญ ๋งŽ์ด ํ’€์—ˆ๋Š”๋ฐ.. ์ด๋†ˆ์˜ ๊ท€์ฐจ๋‹ˆ์ฆ˜๋•Œ๋ฌธ์— ์ž˜ ์•ˆ์˜ฌ๋ ธ๋‹ค.. ์ตœ๋Œ€ํ•œ! ์˜ฌ๋ ค๋ณด์ž ํ›„ ์˜ค๋Š˜ ๋!

0๊ฐœ์˜ ๋Œ“๊ธ€