요구능력 : 식을 잘 만들 수 있는지
코드설명 :
i를 자릿수라고 생각하자.
1의 자리가 있는 수
i가 1일때
count += n - 1 + 1이다.
10의 자리가 있는 수
i가 10일때
count += n - 10 + 1이다.
100의 자리가 있는 수
i가 100일때
count += n - 100 + 1이다.
101이라는 수가 n으로 들어왔다고 가정해보자.
이해하기 쉽게 역순으로 설명해보자면,
i가 100일때
count += 101 - 100 +1 이다.
100의 자리에는 100과 101두개가 들어가므로 2가 나온다.
i가 10일때
count += 101 - 10 + 1이다.
10의자리부터는 10~101까지이므로 92개가 나온다.
i가 1일때
count += 101 - 1 + 1이다.
1의자리부터는 1~101까지이므로 101개가 나온다.
그러니까 1의자리는 101까지 있으니까 총 101번 나온다는 의미이다.
10의자리는 10부터 있으니까 92개 나온다는 의미이다.
100의자리는 100과 101두개니까 2개 나온다는 의미이다.
자릿수가 나오는 개수를 더했다고 생각하면된다.
일의자리개수 + 십의자리개수 + 백의자리개수
무슨말인지 이해가 잘안가는 사람은 아래를 보고 이해가 되길바란다.
이 문제는 자릿수를 세는 문제이기 때문에 일의자리는 1개 십의자리는 2개 백의자리는 3개의 자릿수를 추가한다.
10을 보면 1과 0이있다.
십의자리는 1
일의자리는 0
그러니까 1~19까지의 일의자리는 19개, 십의자리는 10개가 되는거다.
후기 : 간단한거같지만 시간초과로 고생하는 문제.. 개인적으로 브루트포스는 시간제한보다는 모든조건을 다찾아보는게 맞는거같은데..
카테고리랑 맞지않는거같다.
수학에 가까운문제..?
let n = Int(String(readLine()!))!
var count = 0
var i = 1
while i <= n {
count += n - i + 1
i = i * 10
}
print(count)
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
[Swift][BFS] 백준 16948번 (데스 나이트) (0) | 2021.12.14 |
---|---|
[Swift][BFS] 백준 16928번 (뱀과 사다리 게임) (0) | 2021.12.14 |
[Swift][BruteForce] 백준 1107번 (리모컨) (0) | 2021.11.23 |
[Swift][Math] 백준 6588번 (골드바흐의 추측) (0) | 2021.11.22 |
[Swift][DP] 백준 13398번 (연속합 2) (0) | 2021.11.22 |
댓글