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() v = 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
'코딩테스트 연습 > 백준' 카테고리의 다른 글
[백준] 1929번 : 소수 구하기 in 파이썬 쉽게 풀기 (0) | 2019.09.23 |
---|---|
[백준] 2581번 : 소수 in 파이썬 쉽게 풀어보기 (0) | 2019.09.21 |
[백준] 6064 : 카잉달력 in python 파이썬 코드, 반례 (0) | 2019.09.08 |
[백준] 2775번 : 부녀회장이 될테야 in python 파이썬 (0) | 2019.09.07 |
[백준] 10250번 : ACM 호텔 in python (0) | 2019.09.06 |