// 영화감독 숌
/*
666
1666
2666
3666
4666
5666 👉 여기까지는 규칙이 있는 듯?
6660 👉 바로 예외가 등장
6661
6662
...
💡 몇줄만 적어봐도 규칙은 없다는 것을 알 수 있다.
💡 그리고 N이 10,000 밖에 안된다 = 전부 다 계산해도 시간 초과 없음
*/
// "666"이 들어가는지 알아보는 함수
//💡 자릿수에 대한 것은 10의 배수로 나누기!
func checkIf(n: Int) -> Bool {
var n = n
while n >= 666 {
if n % 1000 == 666 {
//👉 1000으로 나눈 나머지 (= 마지막 3자리)가 666인지 확인
return true
}
n /= 10 //👉 자리수 한 칸 앞으로 당겨서 다시 확인
}
return false
}
let N = Int(readLine()!)!
var now = 666 //👉 첫 번째 경우의 수를 알고 있으므로 여기서 부터 반복문
var count = 1
while count != N {
now += 1
if checkIf(n: now) {
count += 1
}
}
print(now)
이 문제를 풀면서 가장 처음 떠올린 것은 “666”이 들어가는지 어떻게 찾을 것인가였습니다.
String.contains()를 사용하면 위에 사용한 방법보다는 훨씬 더 간단하게 코드를 만들 수 있었습니다.
🚫 다만 해당 메소드를 사용한 경우에 이 문제에서는 시간초과가 나서 사용할 수 없었습니다.
import Foundation
//👉 String.contains(Character)는 Foundation 없이도 사용이 가능하지만
//⭐️ String.contains(StringProtocol)은 Foundation이 있어야 사용이 가능하다!
func checkIf(n: Int) -> Bool {
return String(n).contains("666")
}