Python
for 문 안에서 if, 그리고 else
Titan.
2023. 2. 10. 02:01
https://www.acmicpc.net/problem/1978
1978번: 소수 찾기
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
www.acmicpc.net
백준 1978번 소수찾기 문제를 풀고 상위권 유저들은 어떻게 풀었나 확인하기 위해 코드를 살펴보다가 재밌는 문법을 발견했다.
우선 나는 다음과 같이 코드를 작성하여 문제를 해결했다.
n = int(input())
nums = list(map(int, input().split()))
total = 0
for num in nums:
if num > 2:
total += 1
for i in range(2, int(num ** (1/2)) + 1):
if num % i == 0:
total -= 1
break
print(total)
그리고 다음 코드는 상위권 유저의 코드이다.
N = int(input())
A = list(map(int, input().split()))
count = 0
for n in A:
if n < 2: continue
for k in range(2, int(n ** 0.5) + 1):
if not n % k:
break
else: count += 1
print(count)
나는 total을 쓰고 이 분은 count를 썼다는데 있어서 차이점이 있긴하지만, 전반적인 흐름은 비슷하다.
하지만 나는 total을 미리 +1 했다가 소수가 아닐 경우에 다시 -1을 빼는 방식으로 했다면
위의 예시로 든 코드는 for문 직후에 else를 이용해 갯수를 더하는 방식이다.
이 문제는 시간과 메모리가 널널한 편이라 상관없지만 만약 총 갯수가 늘어나고 시간 제약이 크다면 두 코드에서 차이점이 나타날 수도 있는 부분이다.
이 코드의 원리는 간단하다.
for 문 안에 break 조건문이 있을 경우 for문의 마지막 요소까지 모두 성공적으로 반복하였을 때, 즉 break가 발동하지 않았을 경우에만 else문이 작동하게 된다.
파이썬의 대략적인 문법은 숙지했다고 생각했었는데 알고리즘 공부를 하다보니 내가 모르는게 참 많았다는걸 느낀다.