머리말
문제 링크
이 문제를 선택한 이유
- Swift 문법 연습(guard, nil coalescing)
풀이
풀이 순서
- 입력 받은 문자열 값을 정수 num으로 변환
- 나누어야 할 소수를 2로 초기화
- num이 해당 소수로 나누어진다면, num을 소수로 나눈 다음 해당 소수를 한번 출력
- 3번이 해당하지 않으면 prime을 1 증가
- 3~4번을 반복하는 while 문 작성
스위프트 코드
import Foundation
var num = Int(readLine() ?? "") ?? 0
var prime = 2
while num > 1 {
guard num <= 10000000 else { break }
guard prime * prime <= num else {
print(num)
break
}
if num % prime == 0 {
num /= prime
print(prime)
} else {
prime += 1
}
}
꼬리말
소수를 판별하는 함수가 필요한가?
- 따로 소수를 판별하는 함수 없이 1을 증가시켜도, 애초에 작은 수부터 반복해서 나누기에 소수로만 나누어진다.
예외 조건 1 - 주의 사항
- num이 1일 경우는 아무것도 출력한다는 조건을 보지 않아서 많이 헤맸다.
다시 한번 문제를 잘 읽어야 한다는 중요성을…
예외 조건 2 - 소수일 때
- 만약 소수가 나오면 자기자신을 출력해야 하므로 2번째 guard 문 (함수의 제곱이 입력값보다 작거나 같다면)을 빼먹으면 안된다.
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] (Python) 12865번: 평범한 배낭 (0) | 2023.07.11 |
---|---|
백준) 1141번: 접두사 (Swift) (0) | 2023.05.29 |
[백준] (Swift) 11866번: 요세푸스 문제 0 (0) | 2023.05.26 |
[백준] (Python) A와 B (0) | 2023.05.26 |
[백준] (Python) 7568번: 덩치 (0) | 2023.05.24 |
댓글