๐ Problem
https://www.acmicpc.net/problem/1065
๐ Submission Code
๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ์ด๋ฅผ ํด๋ณด์๋๋ฐ, ๊ฒฐ๋ก ์ ์ผ๋ก๋ ๋ฉ๋ชจ๋ฆฌ๋ 30864KB๋ก ๋์ผํ์๊ณ ์๊ฐ์ 68ms ๋๋ 72ms๋ก ๋น์ทํ์๋ค.
1 ) ์ ์ฒด - ํ์๊ฐ ์๋ ์ ๋นผ๊ธฐ
ํ ์๋ฆฌ ์์ธ 1~9๋ ์์ด์ ๊ธธ์ด๊ฐ 1์ธ ๋ฑ์ฐจ์์ด๋ก, ๋ ์๋ฆฌ ์์ธ 10~99๋ ๊ธธ์ด๊ฐ 2์ธ ๋ฑ์ฐจ์์ด๋ก ๋ณธ๋ค. ์ดํด๊ฐ ์ ๊ฐ์ง ์๋๋ค๋ฉด ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํด์ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
๋ฐ๋ผ์ ์ ๋ ฅ๊ฐ์ด ์ต๋ 1000์ด๋ฏ๋ก, ์ธ ์๋ฆฌ ์ ๋๋ ๋ค ์๋ฆฌ ์(1000 1๊ฐ)์ธ ๊ฒฝ์ฐ๋ง ํ์ธ์ ํ๋ฉด ๋๋ค.
์ธ์๋ฆฌ ์ ์ผ๋๋ ๋ฑ์ฐจ์์ด์ ์ ์์ ๋ฐ๋ผ [์ธ๋ฒ์งธ ์๋ฆฌ(ํญ) - ๋๋ฒ์งธ ์๋ฆฌ(ํญ)] == [๋๋ฒ์งธ ์๋ฆฌ(ํญ) - ์ฒซ๋ฒ์งธ ์๋ฆฌ(ํญ)] ์ฆ, ๊ณต์ฐจ(common difference)๊ฐ ๊ฐ์ง ์์ ๊ฒฝ์ฐ ํ์๊ฐ ์๋ ์๋ก ์นด์ดํธ ํด์ค๋ค.
๋ง์ง๋ง์ ์ ์ฒด ์์์ ํ์๊ฐ ์๋ ์๋ฅผ ๋นผ์ค๋ค.
# case 1 : ํ์๊ฐ ์๋ ์ ์นด์ดํธํด์ ์ ์ฒด์์ ๋นผ๊ธฐ - ๋ฉ๋ชจ๋ฆฌ 30864KB / ์๊ฐ 68ms
import sys
num = int(sys.stdin.readline())
count = 0 # ํ์๊ฐ ์๋ ์ ์นด์ดํธ
for i in range(1, num + 1):
# ๊ธธ์ด๊ฐ 3์๋ฆฌ์ด๊ฑฐ๋ 4์๋ฆฌ์ผ๋๋ง ํ์ธ(1์๋ฆฌ ๋๋ 2์๋ฆฌ์ผ๋๋ ๋ฌด์กฐ๊ฑด ํ์์)
if len(str(i)) == 3 and (int(str(i)[2]) - int(str(i)[1])) != (int(str(i)[1]) - int(str(i)[0])): count += 1
elif len(str(i)) == 4: count += 1
print(num - count)
# ---------------------------------------------------------------------------------
# case 1 : (ํจ์๋ก ๋ง๋ค๊ธฐ) ํ์๊ฐ ์๋ ์ ์นด์ดํธํด์ ์ ์ฒด์์ ๋นผ๊ธฐ - ๋ฉ๋ชจ๋ฆฌ 30864KB / ์๊ฐ 72ms
import sys
num = int(sys.stdin.readline())
def solve(num):
count = 0 # ํ์๊ฐ ์๋ ์ ์นด์ดํธ
for i in range(1, num + 1):
# ๊ธธ์ด๊ฐ 3์๋ฆฌ์ด๊ฑฐ๋ 4์๋ฆฌ์ผ๋๋ง ํ์ธ(1์๋ฆฌ ๋๋ 2์๋ฆฌ์ผ๋๋ ๋ฌด์กฐ๊ฑด ํ์์)
if len(str(i)) == 3 and (int(str(i)[2]) - int(str(i)[1])) != (int(str(i)[1]) - int(str(i)[0])): count += 1
elif len(str(i)) == 4: count += 1
return num - count
print(solve(num))
2 ) ํ์์ธ ์ ์นด์ดํธ ํ๊ธฐ
ํ์์ธ ์๋ฅผ ์นด์ดํธํด๋ณด์. 99 ์ดํ ์ฆ ๋์๋ฆฌ ์ ์ดํ์ธ ๊ฒฝ์ฐ์๋ case1๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์๋ก ์ทจ๊ธํ์ฌ ์นด์ดํธ๋ฅผ ํด์ค๋ค.(sum = 99)
์ธ์๋ฆฌ ์ ์ด์์ผ ๋๋, ์ฒซ๋ฒ์งธ ์ + ์ธ๋ฒ์งธ ์(2a+2b) == ๋๋ฒ์งธ์(a+b) * 2 ์ธ ๊ฒฝ์ฐ๋ฅผ ํ์ธํ์ฌ ํ์๋ก ์ถ๊ฐํด์ค๋ค.
์ดํด๊ฐ ์ ๊ฐ์ง ์๋๋ค๋ฉด ์๋์ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํ์.
# case 2 : ํ์์ธ ์ ์นด์ดํธ ์ ๋ฆฌ - ๋ฉ๋ชจ๋ฆฌ 30864KB / ์๊ฐ 68ms
import sys
num = int(sys.stdin.readline())
if num <= 99: sum = num # 3์๋ฆฌ ์ ์ดํ์ผ ๋๋ ์
๋ ฅํ ์ = ํ ์
else:
sum = 99 # 3์๋ฆฌ ์ ์ด์์ผ ๋๋, ๋์๋ฆฌ ์๊น์ง๋ ํ ์๋ก ์นด์ดํธํ๊ณ ์์
for i in range(100, num + 1):
if i//100 + i%10 == ((i%100) // 10) * 2: sum += 1
print(sum)
# ---------------------------------------------------------------------------------
# case 2 : ํ์์ธ ์ ์นด์ดํธ ์ดํดํ๊ธฐ
import sys
num = int(sys.stdin.readline())
if num <= 99: sum = num # 3์๋ฆฌ ์ ์ดํ์ผ ๋๋ ์
๋ ฅํ ์ = ํ ์
else:
sum = 99 # 3์๋ฆฌ ์ ์ด์์ผ ๋๋, ๋์๋ฆฌ ์๊น์ง๋ ํ ์๋ก ์นด์ดํธํ๊ณ ์์
for i in range(100, num + 1):
# ์ฒซ๋ฒ์งธ ์ + ์ธ๋ฒ์งธ ์(2a+2b) == ๋๋ฒ์งธ์(a+b) * 2
if i//100 + i%10 == ((i%100) // 10) * 2:
print(i) # ํ์์ธ ์
print(f"1 : {i//100}") # 100์ผ๋ก ๋๋ ๋ชซ : ์ฒซ๋ฒ์งธ ์๋ฆฌ ์(a)
print(f"2 : {i%10}") # 10์ผ๋ก ๋๋ ๋๋จธ์ง : ์ธ๋ฒ์งธ ์๋ฆฌ ์(a+2b)
print(f"3 : {(i%100 // 10) * 2}") # ๋๋ฒ์งธ ์๋ฆฌ ์(a+b) * 2
sum += 1
print(sum)