코딩테스트 연습/백준

[백준] 1978번 : 소수 찾기 in python 설명

슈퍼짱짱 2019. 9. 20. 08:00
반응형

BAEKJOON 1978 소수 찾기 in 파이썬 쉽게 설명하기



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




코드1


1
2
3
4
5
6
7
8
9
10
input(); v=map(int,input().split())
cnt=0
 
for i in list(v):
    if i==1 :
        continue
    if len([1 for z in [j for j in range(2, i)] if i % z == 0])==0 :
        cnt+=1
 
print(cnt)
cs




코드설명


소수란? 1과 나 자신으로만 나누어지지 않는 수.

예를들어, 2 3 5 7 9 11 13 17 19 ...

cf) 1은 소수에서 제외되며, 4=2*2, 6=2*3


따라서 각 입력받은 숫자를 i라 할 때 i를 2~(i-1)의 모든 숫자로 나누어 보고 나머지가 0이 아니면 소수이다.




코드2


1
2
3
input()
= map(int,input().split())
print(sum(map(lambda n:all(n%j for j in range(2,n))*n>1,v)))
cs

 



코드설명


all(n%j for j in range(2,n)) 은 n이 소수일 때와 소수가 아닐 때 다음과 같은 값을 return한다.


1) n이 소수일 때


>>> [5%j for j in range(2,5)]

[1, 2, 1]


>>> all(5%j for j in range(2,5))

True


2) n이 소수가 아닐 때


>>> [9%j for j in range(2,9)]

[1, 0, 1, 4, 3, 2, 1]


>>> all(9%j for j in range(2,9))

False


여기에 n이 1일 때는 False를 출력해야 하므로 n>1에 대한 boolean값을 곱하여 return한다.

* True x Ture = Ture/ True x False = False


* all() 함수


all(x)는 반복 가능한(iterable) 자료형 x를 입력 인수로 받으며 이 x가 모두 참이면 True, 거짓이 하나라도 있으면 False를 돌려준다.


>>> all([1,1,2,3,4,5])

True


>>> all([1,1,0])

False


* lambda 인자 : 표현식


lamda는 입력받은 인자를 표현식으로 계산한 값으로 return한다.


>>> (lambda x,y: x + y)(10, 20)

30


이는 다음 함수와 같다.


>>> def plus(x, y):

      return x + y


>>> plus(10, 20)

30


반응형