๐ก ์กฐ๊ฑด
- L๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , U๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋ชจ๋ ์ ์์ ๊ฐ ์๋ฆฌ์ ํฉ์ ๊ตฌํ๋ ๋ฌธ์ .
0 โค L โค U โค 2,000,000,000
- ์ํ ์ ํ์ ๋ฌธ์
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
24660 308357171
์คํ๊ฒฐ๊ณผ
11379854844
โจ๏ธ ๋ฌธ์ ํ์ด
- ๊ฐ์ฅ ๋จผ์ ๋ฌธ์ ๋ฅผ ๋ณด๋ฉฐ ์ฃผ๋ชฉํด์ผํ ๋ถ๋ถ์ L๊ณผ U์ ๋ฒ์์ด๋ค.
L๊ณผ U์ ๋ฒ์๋ ์ต๋ 20์ต๊น์ง๋ก, ์ผ์ผํ ๊ฒ์ฌํ์ ๋ ์ต์
์ ๊ฒฝ์ฐ์๋ 0๋ถํฐ 20์ต๊น์ง์ ๋ชจ๋ ์๋ฅผ ๊ฒ์ฌํด์ผํ๊ธฐ ๋๋ฌธ์
๋ฌธ์ ์์ ์ฃผ์ด์ง 2์ด๋ผ๋ ์๊ฐ ์์ ์ ๋ ํด๊ฒฐํ ์๊ฐ ์๋ค.
- (1)๋ฒ์์ ์ ๋ฆฌํ๋๋ก, ์ฐ๋ฆฌ๋ L๊ณผ U์ ๋ฒ์๋ฅผ ์
๋ ฅ๋ฐ์ ์ผ์ผํ ์ซ์ ํ๋์ฉ ๊ฒ์ฌํ๋ ๋ฐฉ๋ฒ์ ํผํด ๊ฐ ์ซ์์ ์๋ฆฟ์๋ฅผ ๋ํด ๋ต์ ์ถ๋ ฅํด์ผ ํ๋ค.
L, U ๋ฅผ ์
๋ ฅ๋ฐ์ L๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , U๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋ชจ๋ ์ ์์ ๊ฐ ์๋ฆฌ์ ํฉ์ ๊ตฌํ๋ ๊ฒ์ ์ด๋ ์ผ์ ๊ตฌ๊ฐ์ ๋ํ ํฉ์ ๊ตฌํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
๊ตฌ๊ฐํฉ์ ๊ฐ๋
์ผ๋ก ์๊ฐ์ ํด๋ณด์.
- L - 1 ๊น์ง ๋ฑ์ฅํ 0~9์ ๊ฐ์๋ฅผ K, U๊น์ง ๋ฑ์ฅํ 0-9 ์ ๊ฐ์๋ฅผ P ๋ผ๊ณ ํ์ ๋,
(P - K) ๋ L ๋ถํฐ U ์ ๋ฒ์์ ํด๋นํ๋ 0-9์ ๊ฐ์๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- L = 1000, U = 1234 ๋ผ๊ณ ๊ฐ์ ํ์ ๋, ์ ๊ทผ ๋ฐฉ๋ฒ์ ๋๊ฐ์ง๊ฐ ์๋ค.
- 1์ ์๋ฆฌ์์๋ถํฐ 0~9๊น์ง์ ๋ฑ์ฅ ํ์๋ฅผ count ํ ๊ฒ์ธ๊ฐ?
- ๊ฐ์ฅ ๋์ ์๋ฆฌ์์๋ถํฐ 0-9๊น์ง์ ๋ฑ์ฅ ํ์๋ฅผ count ํ ๊ฒ์ธ๊ฐ?
์ผ๋จ ๋ณธ์ธ์ ํ์ด๋ 1์ ์๋ฆฌ์์๋ถํฐ 0~9๊น์ง์ ์ซ์๋ฅผ count ํ๋ค.
- ๋จผ์ , 1์ ์๋ฆฌ์ ์ด๋ค ์ซ์๊ฐ ๋ช ๋ฒ ๋ฑ์ฅํ๋์ง์ ๋ํด์ ์ดํด๋ณด์. ๋จผ์ 0๋ถํฐ ์ดํด๋ณด์.
10 ~ 90 : 10
100 ~ 190, 200 ~ 290, ... ,900~990 : 90
1000 ~ 1090, 1100 ~ 1190 : 20
1200 ~ 1230 : 4
์ด 124 ํ
- 1์ ์๋ฆฌ์์ 5๊ฐ ๋ช๋ฒ ๋ฑ์ฅํ ๊น?
15 ~ 95 : 10
105 ~ 195, 205 ~ 295, ... ,905 ~ 995 : 90
1005 ~ 1095, 1105 ~ 1195 : 20
1205 ~ 1225 : 3
์ด 123 ํ
- 10์ ์๋ฆฌ์์ 4๋ ๋ช ๋ฒ ๋ฑ์ฅํ ๊น?
40 ~ 49 : 10
140 ~ 149, 240 ~ 249, ..., 940 ~ 949 : 90
1040 ~ 1049, 1140 ~ 1149 : 20
์ด 120 ํ.
- ์ฌ๊ธฐ์ ์ ์ ์๋ ๊ฒ์, ์ฐ๋ฆฌ๋ ์ด๋ ๊ฒ ์ซ์์ ์๋ฆฟ์ ๋ณ๋ก ๊ฐ ์ซ์๊ฐ ๋ช๋ฒ์ฉ ๋ฑ์ฅํ๋์ง ๊ณ์ฐํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๋ํ, 10์ ์๋ฆฌ์์ 4๊ฐ ๋ช ๋ฒ ๋ฑ์ฅํ๋์ง๋ฅผ ์
๋์๋ 1234๋ฅผ ๋์ ์ ์๊ธฐ ๋๋ฌธ์ 1149๊น์ง ์ธ์ด 120ํ๊ฐ ๋์๋ค.
์ด์ ์์ค์ฝ๋ ๋ก์ง์ ๋ฐ๋ผ์ ์ดํดํ๋ฉด ์ฝ๋ค.
n_arr
์ ์
๋ ฅ๋ฐ์ n - 1
๊น์ง 0 ๋ถํฐ 9์ ๋ฑ์ฅํ์๋ฅผ ์ ์ฅํ๋ค.
m_arr
์ ์
๋ ฅ๋ฐ์ m
๊น์ง 0 ๋ถํฐ 9์ ๋ฑ์ฅํ์๋ฅผ ์ ์ฅํ๋ค.
- ๊ฐ์ฅ ๋จผ์ 1์ ์๋ฆฌ์์์ 0~9๊น์ง์ ๋ฑ์ฅํ์๋ฅผ ์ ์ฅํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ point ๋ฅผ 1๋ก, n์ -1 ํด์ค๋ค n์ด 0์ด ์๋ ๋๊น์ง while ๋ฐ๋ณต์ ํ๋ค.
- n % 10 ์ด 9๊ฐ ์๋ ๊ฒฝ์ฐ, n ์ ๊ฐ ์๋ฆฟ์์ ์ซ์์ ํด๋นํ๋ n_arr ์์๊ฐ์ point๋ฅผ ๋ํด์ค๋ค.
์๋ฅผ ๋ค๋ฉด, ์
๋ ฅ๋ฐ์ n์ด 1234 ๋ถํฐ ์์ํ์ฌ 1233, 1232, 1231, 1230 ๊น์ง ๊ฐ ์๋ฆฟ์์ ํด๋นํ๋ ์ซ์๋ฅผ point ๋งํผ ์ฌ๋ ค์ค๋ค.
- n < 10 ์ธ ๊ฒฝ์ฐ๋ ์ค๋ฅธ์ชฝ ๋ ๋ถํฐ ํ์ธํ์ฌ n //= 10 ์ ๋ฐ๋ณตํด ํ์๋ฆฌ์๊ฐ ๋จ์์ ๋ ์ฒ๋ฆฌํด์ฃผ๋ ๋ก์ง์ด๋ค.
์ด ๊ฒฝ์ฐ๋ ๊ฑฐ์ ๋ง์ง๋ง์ ํด๋นํ๋ ๋ก์ง์ด๋ ์ดํ์ ์์๋ณผ ๊ฒ์ด๋ค.
- n >= 10 ์ธ ๊ฒฝ์ฐ๋ ๋ง์ฝ 1234 ๋ผ๋ฉด 1์ ์๋ฆฌ๋ฅผ ๋ณผ ๋, 4 ์ดํ๋ 124๋ฒ์ด ๋ฑ์ฅํ๋ฉฐ, 5 ์ด์์ 123๋ฒ์ด ๋ฑ์ฅํ๋ค.
์ด๋ `(n // 10 + 1) * point` ๋ก ํํํ ์ ์๋ค.
- ๋ค์ n < 10 ์ธ ๊ฒฝ์ฐ๋ฅผ ๋ณด์๋ฉด, 0๋ถํฐ n๊น์ง์ ๊ฐ ์๋ฆฌ์ ๋ํด์ point ๋งํผ์ฉ ๋ํด์ฃผ๊ณ , 0์ธ ๊ฒฝ์ฐ๋ point ๋ฅผ ๋นผ์ค๋ค.
๋ค๋ฅธ ์ซ์๋ ์ฝ 130ํ ๋ฑ์ฅํ๋ ๊ฒฝ์ฐ, 0์ 120ํ ๋ฑ์ฅํ๋ค. ์ง์ ๊ณ์ฐํด๋ณด์.
- 0๋ถํฐ n - 1 ๊น์ง 0
9๊น์ง์ ๋ฑ์ฅํ์๋ฅผ n_arr์ ์ ์ฅํ๋ค๋ฉด, ์ด์ 0๋ถํฐ m๊น์ง 09 ๋ฑ์ฅํ์๋ฅผ m_arr ์ ๊ฐ์ ๋ก์ง์ผ๋ก ์ ์ฅํ๋ค.
- ์ดํ๋ ๊ฐ์๋ฆฌ์ ํฉ์ ๋ํ๋ ์์
์ด๋ค.
n_arr, m_arr ์ ์ํํ๋ฉด์ ๊ฐ ๋ฑ์ฅํ์ (m_arr[i] - n_arr[i]) ์ i ๋ฅผ ๊ณฑํด ans ์ ๋ํด์ค๋ค.
์ด๋ ๊ฐ ์๋ฆฌ์๋ฅผ ๋ํด์ฃผ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
๐ฅ ์์ค ์ฝ๋
from sys import stdin
n, m = map(int, stdin.readline().split())
n_arr = [0 for _ in range(10)]
m_arr = [0 for _ in range(10)]
n -= 1
point = 1
while n != 0:
while n % 10 != 9:
for i in str(n):
n_arr[int(i)] += point
n -= 1
if n < 10:
for i in range(n + 1):
n_arr[i] += point
n_arr[0] -= point
break
else:
for i in range(10):
n_arr[i] += (n // 10 + 1) * point
n_arr[0] -= point
point *= 10
n //= 10
point = 1
while m != 0:
while m % 10 != 9:
for i in str(m):
m_arr[int(i)] += point
m -= 1
if m < 10:
for i in range(m + 1):
m_arr[i] += point
m_arr[0] -= point
break
else:
for i in range(10):
m_arr[i] += (m // 10 + 1) * point
m_arr[0] -= point
point *= 10
m //= 10
ans = 0
for i in range(10):
ans += (m_arr[i] - n_arr[i]) * i
print(ans)
๐พ ๋ฐฐ์ด์
- ์ํ์ ์ฌ๊ณ ๋ฅ๋ ฅ์ด ํ์ํ ๋ฌธ์ ์๋ค. ์ค์ค๋ก๋ ์ดํดํ๊ธฐ ์ด๋ ค์, ๋์๊ฒ ์๊ณ ๋ฆฌ์ฆ ์ ์ผ๋ก ๋์์ ์ฃผ๋ ์ค์น์ด์ ๋์์๊ฒ ๋์์ ๋ฐ์ ์ดํดํ๋ค.
- ๊ฐ ์๋ฆฌ์ ๋ณ๋ก 0~9์ ์ซ์๊ฐ ๋ช ๋ฒ ๋ฑ์ฅํ๋์ง ๊ณ์ฐํ๋ ๊ฒ์ ๋งค์ฐ ํท๊ฐ๋ฆฌ๋ ์์
์ด์๋ค.
- 0์ ๋ฑ์ฅํ์๋ ๋ฐ๋์ ๋ค์ํ๋ฒ ์ฒดํฌํ๊ณ ๊ณ์ฐํด๋ณด์์ผํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด 1019 ๋ฒ ๋ฌธ์ ๋ฅผ ํ๋ฆฌ๊ฒ ๋๋ค.