본문 바로가기
Algorithm/문제풀이_백준

[Swift][BruteForce] 백준 1748번 (수 이어쓰기 1)

by Joahnee 2021. 11. 23.

요구능력 : 식을 잘 만들 수 있는지

 

코드설명 : 

 

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)

댓글