본문 바로가기
코딩 테스트/백준

[백준] (Swift) 11653번: 소인수분해

by Dev.Andy 2023. 7. 12.

머리말

문제 링크

11653번: 소인수분해

이 문제를 선택한 이유

  • Swift 문법 연습(guard, nil coalescing)

풀이

풀이 순서

  1. 입력 받은 문자열 값을 정수 num으로 변환
  2. 나누어야 할 소수를 2로 초기화
  3. num이 해당 소수로 나누어진다면, num을 소수로 나눈 다음 해당 소수를 한번 출력
  4. 3번이 해당하지 않으면 prime을 1 증가
  5. 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 문 (함수의 제곱이 입력값보다 작거나 같다면)을 빼먹으면 안된다.

댓글