Where who wants to meet someone

백준 Swift [13909] 창문 닫기 본문

백준 알고리즘 문제 기록/약수, 배수와 소수 2

백준 Swift [13909] 창문 닫기

Lust3r 2023. 8. 21. 18:56
728x90

난이도

실버 V

 

문제

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

 

13909번: 창문 닫기

첫 번째 줄에는 창문의 개수와 사람의 수 N(1 ≤ N ≤ 2,100,000,000)이 주어진다.

www.acmicpc.net

 

내 답안

import Foundation

let input = Int(readLine()!)!

/*
 4 = 1 2 4
 9 = 1 3 9
 16 = 1 2 4 8 16
 */

var count = 0

var i: Float = 1

while Int(pow(i, 2)) <= input {
    count += 1
    i += 1
}

print(count)
  • 지난 문제를 풀고 바로 푼 영향탓에 Bool값을 담은 windows라는 배열을 사용하였지만 메모리 이슈로 틀렸다.
    큰 수가 넣어졌을 때 그만큼 작업하는 것이 자원을 많이 소모하는 것 같았다.
  • 때문에 그럼 어떻게 해야 작업을 줄일 수 있을까 고민이 되었고 패턴을 무작정 찾아보고자 주석에 담긴 것처럼 수를 나열해 보았고, 여닫는 작업을 반복했을 때 결과적으로 true가 되는 수를 남기고 지워보니 제곱수가 나왔다.
  • 그렇다면 주어진 창문 수 안에서 제곱수의 개수를 찾으면 될 것 같았다.

  • 1) input은 사람 수이자 창문의 수
    2) count는 제곱수를 카운트할 변수
    3) while문을 통해 i를 제곱한 값이 input보다 작거나 같다면 count를 증가시키고 i를 증가시키는 작업을 수행
    4) count 출력