[Baekjoon] 1978. 소수 찾기 / 1929. 소수 구하기

mj·2024년 4월 22일
0

코딩테스트문제

목록 보기
1/50

1978. 소수 찾기

문제
https://www.acmicpc.net/problem/1978


🔍 내 답

n = int(input())
data = list(map(int, input().split()))
cnt = 0

for i in data:
    temp = 0

    if i==1: 
        continue

    for j in range(2,i):
        if i%j==0: #소수가 아닌 경우
            temp = 1
            break

    if temp==0:
        cnt += 1

print(cnt)

📌 코드설명

소수란? : 1과 자기 자신 만을 약수로 가지는 수들
2부터 (자기자신-1)까지 for문을 돌려 나눈다. 이때 나누어지면 소수가 아니므로 for문 탈출
변수temp : 소수(끝까지 나누어지지 않음, for문의 끝까지 갔을때)일때 cnt를 +1 하기 위한, 소수임을 나타내는 변수.



🔍 다른 답

# 소수 찾기
#i가 자신인 i에 도달 후 나누어떨어진다면 그 수는 소수이므로 cnt+=1

n = int(input())
data = list(map(int, input().split()))
cnt = 0

for i in data:
    
    if i==1: 
        continue

    for j in range(2,i+1):
        if i%j==0: #소수가 아닌 경우
            if i == j: cnt+=1
            break


print(cnt)

i가 자신인 i에 도달 후 나누어떨어진다면 그 수는 소수이므로 cnt+=1
내 답에서처럼 굳이 temp변수를 만들 필요가 없어짐.



🔍 빠른 답

#소수 찾기 - 빠른 답

input_data = int(input())
nums = list(map(int,input().split()))
count = 0

for i in nums:
    if i == 1:
        continue

    for j in range(2,int(i**0.5) + 1):
        if i % j == 0:
            break
    else:
        count += 1

print(count)

📌 코드설명

2부터 자기 자신 전까지 하나하나 for문을 돌려 나누어 확인하게 되면 프로그램 속도가 느리다는 단점이 있다.
더 빠르게 소수를 찾기 위해서는 어떤 수의 루트(제곱근) 전까지만 나누어보면 된다.
ex) 18을 예시로 들어보자면
1 x 18
2 x 9
3 x 6
6 x 3
9 x 2
18 x 1
소수를 구할 때 어떤 숫자의 제곱근 숫자까지만 검사를 하면 소수인지 판별할 수 있다.

코드 설명 참고) https://imcoding-official.tistory.com/129

🌀 **연산자

이 연산자는 x ** y처럼 사용했을 때 x의 y제곱값을 리턴한다

>>> a = 3
>>> b = 4
>>> a ** b
81

🌀 for-else문

for 변수 in 반복:
	수행문1
else:
	수행문2

수행문2는 for반복문이 마지막 요소까지 모두 반복했을 경우 그 다음에 수행된다. 즉, 모든 반복이 성공적으로 수행된 경우에 한 번 수행된다. 하지만 break문을 만나면 else구문은 수행되지 않고 for블럭을 완전히 빠져나간다.

참고) https://studymake.tistory.com/208



1929. 소수 구하기

문제
https://www.acmicpc.net/problem/1929


🔍 내 답

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

for i in range(m, n+1): #m이상 n이하의 수 탐색
    #i가 소수인지 판별
    if i==1: continue
    for j in range(2, int(i**0.5) + 1): 
        if i % j == 0 : break #소수가 아님
    else: 
        print(i)
profile
일단 할 수 있는걸 하자.

0개의 댓글