[Python-Baekjoon] ๊ธฐ๋ณธ์ˆ˜ํ•™ 2

Beanxxยท2022๋…„ 1์›” 17์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
9/10
post-thumbnail

๋ฐฑ์ค€-๋‹จ๊ณ„๋ณ„๋กœ ํ’€์–ด๋ณด๊ธฐ-'๊ธฐ๋ณธ ์ˆ˜ํ•™ 2' ํŒŒํŠธ ๋ฌธ์ œ๋“ค ์ค‘ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฐœ๋… ๋ฐ ๋ฌธ์ œ๋“ค์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

2022.01.17

[Baekjoon] 1978. ์†Œ์ˆ˜์ฐพ๊ธฐ

:2๋ถ€ํ„ฐ X-1๊นŒ์ง€ ๋ชจ๋‘ ๋‚˜๋ˆ ์„œ X๊ฐ€ ์†Œ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋ฌธ์ œ 1

๐Ÿ“˜ 1978 ๋ฌธ์ œ ๋งํฌ

n = int(input())
num_list = list(map(int, input().split()))

cnt = 0

for i in num_list:
    if i != 1:  # 1์€ ์†Œ์ˆ˜ ์•„๋‹˜
        for j in range(2, i):  # range: 2 ~ i-1
            if i % j == 0:  # ์†Œ์ˆ˜ ์•„๋‹Œ ๊ฒฝ์šฐ
                break
        else:  # i๊ฐ€ 1๊ณผ ์ž์‹  i๋ฅผ ์ œ์™ธํ•œ ์–ด๋– ํ•œ j๋กœ๋„ ๋‚˜๋ˆ ์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ = ์†Œ์ˆ˜
            cnt += 1
print(cnt)

2022.01.17

[Baekjoon] 2581. ์†Œ์ˆ˜

:2๋ถ€ํ„ฐ X-1๊นŒ์ง€ ๋ชจ๋‘ ๋‚˜๋ˆ ์„œ X๊ฐ€ ์†Œ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋ฌธ์ œ 2

๐Ÿ“˜ 2581 ๋ฌธ์ œ ๋งํฌ

m = int(input())
n = int(input())

arr = []  # ๋นˆ ๋ฐฐ์—ด

for i in range(m, n+1):  # range: m ~ n
    if i == 1:  # 1์€ ์†Œ์ˆ˜ ์•„๋‹˜
        pass
    elif i == 2:  # 2๋Š” ์†Œ์ˆ˜์ž„
        arr.append(i)
    else:
        for j in range(2, i):  # range: 2 ~ i-1
            if i % j == 0:  # ๋ฌด์–ธ๊ฐ€๋กœ ๋‚˜๋ˆ ์ง€๋Š” i๋Š” ์†Œ์ˆ˜๊ฐ€ ์•„๋‹˜
                break
            elif j == i-1:  # j๊ฐ€ ๋ฒ”์œ„ ๋์ธ i-1๊นŒ์ง€ ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด
                arr.append(i)  # i๋ฅผ ์†Œ์ˆ˜ ๋ฐฐ์—ด์— ์ถ”๊ฐ€

if len(arr) == 0:
    print('-1')
else:
    print(sum(arr))
    print(min(arr))

2022.01.17

[Baekjoon] 11653. ์†Œ์ธ์ˆ˜๋ถ„ํ•ด

:N์„ ์†Œ์ธ์ˆ˜๋ถ„ํ•ดํ•˜๋Š” ๋ฌธ์ œ

๐Ÿ“˜ 11653 ๋ฌธ์ œ ๋งํฌ

n = int(input())

while n != 1:  # n์ด 1์ด ๋  ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
    for i in range(2, n+1):  # ๋ฒ”์œ„: 2 ~ n
        if(n % i == 0):  # n์„ 2๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ
            print(i)  # n์ด ๋‚˜๋จธ์ง€ ์—†์ด ๋‚˜๋ˆ ์ง€๋ฉด ์ถœ๋ ฅ
            n = n // i
            break

2022.01.20

[Baekjoon] 1929. ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ

:์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋กœ ํ’€์–ด ๋ด…์‹œ๋‹ค.

๐Ÿ“˜ 1929 ๋ฌธ์ œ ๋งํฌ

m, n = map(int, input().split())

for i in range(m, n+1):
    if i == 1:
        continue
    for j in range(2, int(i ** 0.5)+1):  # range(2, i) -> ์‹œ๊ฐ„์ดˆ๊ณผ ๋œธ.
        if i % j == 0:
            break
    else:
        print(i)
  • ์ด๋ ‡๊ฒŒ ํ’€์—ˆ์„ ๊ฒฝ์šฐ์— ๋งž๊ธด ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค๐Ÿ˜ข (5840ms)

-->

โžฐ ๊ทธ๋ž˜์„œ '์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด'๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด ์‹œ๊ฐ„์ด ๋งŽ์ด ๋‹จ์ถ•๋œ๋‹ค. (260ms)

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด

: ๊ณ ๋Œ€ ๊ทธ๋ฆฌ์Šค ์ˆ˜ํ•™์ž ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค๊ฐ€ ๋ฐœ๊ฒฌํ•œ ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•.
์†Œ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ตฌ๊ฐ„์˜ ์ˆ˜(m~n) ๊ฐ€์šด๋ฐ n์˜ ์ œ๊ณฑ๊ทผ๋ณด๋‹ค ์ž‘์€ ์†Œ์ˆ˜์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ง€์šฐ๊ณ  ๋‚จ๋Š” ์ˆ˜๋Š” ๋ชจ๋‘ ์†Œ์ˆ˜๊ฐ€ ๋จ.
์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ€์žฅ ์ž‘์€ ์†Œ์ˆ˜์ธ 2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ, 2์˜ ๋ฐฐ์ˆ˜(2, 4, 6 ...)๋ฅผ ๋ชจ๋‘ ์ง€์šฐ๊ณ , ์ง€์›Œ์ง€์ง€ ์•Š์€ ๋‚จ์€ ์ˆ˜ ์ค‘์—์„œ ๋‹ค์Œ ์†Œ์ˆ˜์ธ 3์˜ ๋ฐฐ์ˆ˜(3, 9, 15 ...)๋ฅผ ์ง€์›€ -> ๋ฒ”์œ„ ๋‚ด์—์„œ ๊ณ„์† ๋ฐ˜๋ณตํ•ด ๋‚˜๊ฐ€๋ฉด ์†Œ์ˆ˜๋งŒ ๋‚จ์Œ.

m, n = map(int, input().split())


def isprime(m, n):
    n += 1
    prime = [True] * n   # ์ดˆ๊ธฐํ™”: n๊ฐœ ์š”์†Œ์— True ์„ค์ •(์†Œ์ˆ˜๋กœ ๊ฐ„์ฃผ)

    # n์˜ ์ตœ๋Œ€ ์•ฝ์ˆ˜๊ฐ€ sqrt(n) ์ดํ•˜์ด๋ฏ€๋กœ i=sqrt(n)๊นŒ์ง€ ๊ฒ€์‚ฌ
    for i in range(2, int(n**0.5)+1):
        if prime[i]:   # i๊ฐ€ ์†Œ์ˆ˜์ธ ๊ฒฝ์šฐ
            for j in range(2*i, n, i):   # i ์ดํ›„ i์˜ ๋ฐฐ์ˆ˜๋“ค์„ False ํŒ์ •
                prime[j] = False

    for i in range(m, n):
        if i > 1 and prime[i] == True:
            print(i)


isprime(m, n)

2022.01.21

[Baekjoon] 4948. ๋ฒ ๋ฅดํŠธ๋ž‘ ๊ณต์ค€

:์†Œ์ˆ˜ ์‘์šฉ ๋ฌธ์ œ 1

๐Ÿ“˜ 4948 ๋ฌธ์ œ ๋งํฌ

def sosu(num):
    if num == 1:
        return False

    for i in range(2, int(num**0.5)+1):
        if num % i == 0:
            return False
    return True


# ๋ฌธ์ œ์—์„œ ์ œํ•œํ•œ ๋ฒ”์œ„: n <= 123,456 -> ์ตœ๋Œ€๋ฅผ ๋ฒ”์œ„๋ฅผ 2n <= 246,912๋กœ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ
sosu_range = list(range(2, 246912))
sosu_list = []   # ์†Œ์ˆ˜๋‹ด์„ ๋นˆ ๋ฆฌ์ŠคํŠธ

for i in sosu_range:   # 2 <= n <= 246,912
    if sosu(i):   # ์†Œ์ˆ˜์— ํ•ด๋‹นํ•˜๋ฉด ์†Œ์ˆ˜ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€
        sosu_list.append(i)

while(1):
    cnt = 0
    n = int(input())

    if n == 0:   # 0 ์ž…๋ ฅ์‹œ ์ž…๋ ฅ ์ข…๋ฃŒ
        break

    for i in sosu_list:
        if n < i <= 2*n:   # ์†Œ์ˆ˜๋ฅผ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฒ”์œ„ ๋‚ด์— ์žˆ์œผ๋ฉด ์นด์šดํŠธ
            cnt += 1

    print(cnt)
  • ์ „์— ์†Œ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋น„์Šทํ•˜๊ฒŒ ํ‘ธ๋‹ˆ๊นŒ ๊ณ„์† ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋–ด๋‹ค.๐Ÿ˜ข

์‹œ๊ฐ„์ดˆ๊ณผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด n์˜ ์ตœ๋Œ€ ๋ฒ”์œ„๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜์—ฌ ์ง€์ •ํ•ด์ฃผ์—ˆ๋‹ค.
๋˜ํ•œ, ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์—ˆ๊ณ , ๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•˜์—ฌ ์†Œ์ˆ˜๋กœ ํŒ๋‹จํ–ˆ์„ ๋•Œ ๋งˆ๋‹ค ๋นˆ ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ  ์ด๋ฅผ ์นด์šดํŠธํ•ด์ฃผ์—ˆ๋‹ค.


2022.01.24

[Baekjoon] 9020. ๊ณจ๋“œ๋ฐ”ํ์˜ ์ถ”์ธก

:์†Œ์ˆ˜ ์‘์šฉ ๋ฌธ์ œ 2

๐Ÿ“˜ 9020 ๋ฌธ์ œ ๋งํฌ

import sys

def sosu(num):
    for i in range(2, int(pow(num, 0.5)) + 1):  # pow(num, 0.5) = num**0.5
        if num % i == 0:  # ์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ
            return False
    if num == 1:  # 1์€ ํ•ญ์ƒ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹˜
        return False
    return True  # ์œ„์˜ ๊ฒฝ์šฐ ์™ธ์—๋Š” ์†Œ์ˆ˜๋ผ๊ณ  ํŒ๋‹จ

T = int(sys.stdin.readline())

for i in range(T):
    n = int(sys.stdin.readline())
    for num in range(n // 2, 0, -1):  # n//2 ~ 0 ๊นŒ์ง€, -1์”ฉ ์ž‘์•„์ง€๋„๋ก
        if sosu(num) and sosu(n-num):
            print(num, n-num)
            break

๊ฐ’ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ int(input()) ๋ณด๋‹ค int(sys.stdin.readline() ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์‹œ๊ฐ„ 3๋ฐฐ์ •๋„ ๋” ๋‹จ์ถ•๋จ.

  • pow(): pow(num, 0.5) = num**0.5 ์ฆ‰, ์ œ๊ณฑ์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜.

profile
FE developer

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