Where who wants to meet someone
백준 Swift [13909] 창문 닫기 본문
728x90
난이도
실버 V
문제
https://www.acmicpc.net/problem/13909
내 답안
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 출력
'백준 알고리즘 문제 기록 > 약수, 배수와 소수 2' 카테고리의 다른 글
백준 Swift [17103] 골드바흐 파티션 (0) | 2023.08.21 |
---|---|
백준 Swift [4948] 베르트랑 공준 (0) | 2023.08.21 |
백준 Swift [1929] 소수 구하기 (0) | 2023.08.18 |
백준 Swift [4134] 다음 소수 (0) | 2023.08.18 |
백준 Swift [2485] 가로수 (0) | 2023.08.17 |