๐ ๋ฌธ์
์๋น์ด๋ TV๋ฅผ ๋ณด๊ณ ์๋ค. ์๋น์ด๋ ์ฑ๋์ ๋๋ฆฌ๋ ค๊ณ ํ์ง๋ง, ๋ฒํผ์ ๋๋ฌด ์ธ๊ฒ ๋๋ฅด๋ ๋ฐ๋์, ์ผ๋ถ ์ซ์ ๋ฒํผ์ด ๊ณ ์ฅ ๋ฌ๋ค.
๋ฆฌ๋ชจ์ปจ์๋ ๋ฒํผ์ด 0๋ถํฐ 9๊น์ง ์ซ์, +์ -๊ฐ ์๋ค. +๋ฅผ ๋๋ฅด๋ฉด ํ์ฌ ๋ณด๊ณ ์๋ ์ฑ๋์์ +1๋ ์ฑ๋๋ก ์ด๋ํ๊ณ , -๋ฅผ ๋๋ฅด๋ฉด -1๋ ์ฑ๋๋ก ์ด๋ํ๋ค. ์ฑ๋ 0์์ -๋ฅผ ๋๋ฅธ ๊ฒฝ์ฐ์๋ ์ฑ๋์ด ๋ณํ์ง ์๊ณ , ์ฑ๋์ ๋ฌดํ๋ ๋งํผ ์๋ค.
์๋น์ด๊ฐ ์ง๊ธ ์ด๋ํ๋ ค๊ณ ํ๋ ์ฑ๋์ N์ด๋ค. ์ด๋ค ๋ฒํผ์ด ๊ณ ์ฅ๋ฌ๋์ง ์ฃผ์ด์ก์ ๋, ์ฑ๋ N์ผ๋ก ์ด๋ํ๊ธฐ ์ํด์ ๋ฒํผ์ ์ต์ ๋ช ๋ฒ ๋๋ฌ์ผํ๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋น์ด๊ฐ ์ง๊ธ ๋ณด๊ณ ์๋ ์ฑ๋์ 100๋ฒ์ด๋ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ ์๋น์ด๊ฐ ์ด๋ํ๋ ค๊ณ ํ๋ ์ฑ๋ N (0 ≤ N ≤ 500,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ๊ณ ์ฅ๋ ๋ฒํผ์ ๊ฐ์ M (0 ≤ M ≤ 10)์ด ์ฃผ์ด์ง๋ค. ๊ณ ์ฅ๋ ๋ฒํผ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ ์งธ ์ค์๋ ๊ณ ์ฅ๋ ๋ฒํผ์ด ์ฃผ์ด์ง๋ฉฐ, ๊ฐ์ ๋ฒํผ์ด ์ฌ๋ฌ ๋ฒ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ ์๋ค.
๐์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฑ๋ N์ผ๋ก ์ด๋ํ๊ธฐ ์ํด ๋ฒํผ์ ์ต์ ๋ช ๋ฒ ๋๋ฌ์ผ ํ๋์ง๋ฅผ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํด์
์ฒ์์๋ ๋ฐฑํธ๋ํน๋ DFS๋ก ํ์ด์ผํ๋ ์ ๊น ์๊ฐํ์๋ค๊ฐ, ๋ธ๋ฃจํธํฌ์ค๋ก ํ ์๋ ์๋ค๋ ๊ฒ์ ๋ณด์๋ค. ๊ทธ๋์ ์ด๋ค ์์ผ๋ก ๋ธ๋ฃจํธํฌ์ค๋ฅผ ์ฌ์ฉํ ์ง ๊ณ ๋ฏผํด๋ณด์๋ค. 0๋ถํฐ 500000๋ฒ ์ฑ๋(๊ณ ์ฅ๋ ์ฑ๋๋ฒํผ์ ์ ์ธ)์ ์์ ๋ n๊น์ง ๊ฐ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ๋ถ!!! ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด ๋จผ์ ๋ ์ฌ๋๋ค. ๊ทธ๋์ ์ด ์๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค๊ฐ ๋ฐฑํธ๋ํน์ด ๋์จ ๊ฒ์ด์๋ค. ์ด๋ ๊ฒ ์ ๋ถ ๊ณ์ฐํ๋ฉด ์๊ฐ๋ณต์ก๋์ ๊ณต๊ฐ๋ณต์ก๋๊ฐ ๋ฌด์๋ฌด์ํ๋ค.
์๋ก ์๊ฐํด๋ธ ๋ฐฉ๋ฒ์ n์์ +1์ ํ๊ฑฐ๋ -1์ ํ์ฌ 0๋ถํฐ 500000(๊ณ ์ฅ๋ ์ฑ๋๋ฒํผ ์ ์ธ)๋ก ๊ฐ๋ ๊ฒ์ด๋ค. ์ฐพ์ผ๋ฉด ๊ทธ ๊ฐ์ ์ ์ฅํ๊ณ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์ฌ์ธํ๊ฒ ์ฒดํฌํด์ค์ผ ํ ๊ฒ์ด ์๋๋ฐ, ์์ ์์น๋ 100์ด๋ผ๋ ์ ๊ณผ ๊ณ ์ฅ๋ ๋ฒํผ์ด ์์ ๊ฒฝ์ฐ input ์ ๋ฐ์ง ์๋ ์ ์ด๋ค.
๐ ํ์ด
candi ๋ผ๋ ๋ฆฌ์คํธ์ ํ๋ณด๊ตฐ ๋ฐ์ดํฐ๋ฅผ ์ง์ด ๋ฃ์ ๋ค์ ์ต์๊ฐ์ ์ถ๋ ฅํด์ฃผ์๋ค. ์ด๊ธฐ ๋ฆฌ์คํธ์๋ ํ์ฌ ์์น์์ ์ค๋ก์ง + ๋๋ - ์ผ๋ก๋ง ์์ง์ธ ๊ฒฝ์ฐ๋ฅผ ์ ์ฅํ์๋ค. (abs(n-now))
๋ง์ฝ ๊ฐ๊ณ ์ ํ๋ ๊ณณ์ด 100์ด๋ผ๋ฉด ์์ง์ด์ง ์์๋ ๋๋ ๊ฒฝ์ฐ์ด๊ธฐ์ candi ๋ฆฌ์คํธ์ 0์ ๋ฃ๋๋ค.
๋ง์ฝ ๊ณ ์ฅ๋ ๋ฒํผ์ด ์๋ค๋ฉด ๋ฐ๋ก ์ฑ๋์ ๋๋ฌ์ ์์ง์ด๋ฉด ๋๋๊น ์์ง์ด๊ณ ์ํ๋ ์ฑ๋์ ๊ธธ์ด(๋๋ฅธ๋ฒํผ์ ์)๋ฅผ ๋ฆฌ์คํธ์ ๋ฃ๋๋ค.
๋ง์ฝ ๋ชจ๋ ์ซ์๋ฒํผ์ด ๊ณ ์ฅ๋ฌ๋ค๋ฉด, ์ด๋์ + ๋๋ - ๋ก ๋ฐ์ ํ์ง ๋ชปํ๋ input๋ง ๋ฐ๊ณ ๋์ด๊ฐ๋ค. ์ด ๊ฒฝ์ฐ๋ ์ฒ์์ ์ถ๊ฐํด์ฃผ์๋ค.
์์ ๊ฒฝ์ฐ์ ํด๋นํ์ง ์์๋ค๋ฉด, ๋ธ๋ฃจํธํ์ ์์์ด๋ท!
์ฌ์ค ํ๋ ๋ ์์ธ์ฒ๋ฆฌ๊ฐ ๋จ์๋ค. ๊ฐ๊ณ ์ ํ๋ ์ฑ๋์ด ํ์๋ฆฌ ์ผ๋ ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฒํผ์ด ๊ณ ์ฅ๋์ง ์์๋ค๋ฉด 1๋ฒ๋ง์ ์ด๋์ด ๊ฐ๋ฅํ๊ธฐ์ 1์ ๋ฆฌ์คํธ์ ๋ด์ ์ฃผ์๋ค.
๋ธ๋ฃจํธํ์์ 0๋ถํฐ 500000๊น์ง i๊ฐ 1์ฉ ์ฆ๊ฐํ ๋ n-i ๋๋ n+i์ด ๊ณ ์ฅ๋ ๋ฒํผ์ ๋๋ฅด์ง ์๊ณ ๊ฐ ์ ์๋ค๋ฉด ๊ทธ ๊ฒฝ์ฐ ๋๋ฅธ ๋ฒํผ์ ์๋ฅผ ๋ฆฌ์คํธ์ ์ถ๊ฐํด์ฃผ์๋ค. n-i๊ณผ n+i ๋ชจ๋ ํ๋์ฉ ํ๋ณด๊ตฐ์ ๋ฃ์ ์ ์๊ฒ ํด์ฃผ์๋ค.
๐ป ์ฝ๋ 1
# ์ฒซ๋ฒ์งธ ์ฝ๋
import sys
input = sys.stdin.readline
n = int(input()) # ์ด๋ํ๊ณ ํ ์ฑ๋
m = int(input()) # ๊ณ ์ฅ๋ ๋ฒํผ์ ์
now = 100 # ํ์ฌ ์์น
candi = [abs(n-now)] # ์ค์ง + ๋๋ - ๋ง์ผ๋ก ์์ง์ธ ๊ฒฝ์ฐ ์ ์ฅ
if n == 100: # ์ด๋ํ๊ณ ์ ํ๋ ์์น๊ฐ 100์ด๋ผ๋ฉด ๊ฐ๋งํ ์์, 0๋ฒ ๋๋ฆ
if m != 0:
map(int,input().rstrip().split())
candi.append(0)
elif m == 0: # ๊ณ ์ฅ๋ ๋ฒํผ์ด ์๋ค๋ฉด ๋ฐ๋ก ์ฑ๋ ๋๋ฆ, ์ฑ๋์ ๊ธธ์ด๋ฒ ๋งํผ ๋๋ฆ
candi.append(len(str(n)))
elif m == 10: # ์ ๋ถ ๊ณ ์ฅ๋ฌ๋ค๋ฉด ์ค์ง +, -๋ง์ผ๋ก ์์ง์, 7๋ฒ์งธ ์ค์์ ์ฒ๋ฆฌํด์ค
map(int,input().rstrip().split())
else:
breakup = set(map(int,input().split()))
if len(str(n)) == 1 and n not in breakup: # ๋ฒํผ ํ๋๋ง์ผ๋ก ์ด๋ํ ์ ์์, 1๋ฒ ๋๋ฆ
candi.append(1)
pass
left = False # -๋ฒํผ ๋๋ฅด๋ ๊ฒฝ์ฐ ํ๋๋ง ๋ด๊ธฐ ์ํ ๋ถ๋ฆฌ์
right = False # + ๋ฒํผ ๋๋ฅด๋ ๊ฒฝ์ฐ ํ๋๋ง ๋ด๊ธฐ ์ํ ๋ถ๋ฆฌ์
for i in range(500001):
plus = set(map(int,str(n+i))) # ํ๋ฌ์ค๋ฒํผ ๋๋ฆ
# ์งํฉ์ ์ฐจ์งํฉ์ ์ฌ์ฉํ์ฌ ๊ณ ์ฅ๋ ๋ฒํผ์ ๋๋ ๋์ง ์ฒดํฌํ๋ค.
# (ํ์ฌ ์งํฉ)๊ณผ (ํ์ฌ ์งํฉ ๊ณ ์ฅ๋ ํค)์ ์ฐจ์งํฉ์ ์ฐจ์ด๊ฐ ์๋ค๋ฉด
if len(plus) == len(plus-breakup):
candi.append(len(str(n+i))+i) # ๋ฒํผ ๋๋ฅธ ํ์ ์บ๋์ ์ถ๊ฐ
right = True # ์ด์ชฝ ๊ฒฝ๋ก๋ ์๋ค๋ ๊ฒ์ ์ฒดํฌ
if 0 <= n-i: # ์ฑ๋์ด ์์์ธ ๊ฒฝ์ฐ๋ ์์
minus = set(map(int,str(n-i)))
if len(minus) == len(minus-breakup):
candi.append(len(str(n-i))+i)
left = True
if left and right: # +ํค๋ง์ผ๋ก, - ํค๋ง์ผ๋ก ๋๋ฅธ ๊ฒฝ์ฐ ๋ชจ๋ ํ๋ฒ์ฉ ์ถ๊ฐํด์คฌ์ ๋ธ๋ฃจํธํฌ์ค๋ฉ์ถค
break
print(min(candi)) # ํ๋ณด๊ตฐ์ ์ต์๊ฐ ์ถ๋ ฅ
๐ป ์ฝ๋ 2
# ๋๋ฒ์งธ ์ฝ๋
import sys
input = sys.stdin.readline
n = int(input())
m = int(input())
now = 100
candi = [abs(n-now)]
if n == 100:
if m != 0:
map(int,input().rstrip().split())
candi.append(0)
elif m == 0:
candi.append(len(str(n)))
elif m == 10:
map(int,input().rstrip().split())
else:
breakup = set(map(int,input().split()))
if len(str(n)) == 1 and n not in breakup:
candi.append(1)
else:
left = False
right = False
for i in range(500001):
plus = set(map(int,str(n+i)))
if len(plus) == len(plus-breakup) and not right:
candi.append(len(str(n+i))+i)
right = True
if 0 <= n-i and not left:
minus = set(map(int,str(n-i)))
if len(minus) == len(minus-breakup):
candi.append(len(str(n-i))+i)
left = True
if left and right:
break
print(min(candi))
์ฒซ๋ฒ์งธ ์ฝ๋์ ๋๋ฒ์งธ ์ฝ๋์ ์ฐจ์ด๋ ์ฒซ๋ฒ์งธ else ํํธ์ ์๋ค.
๋ง์ฝ right ์ ๊ฒฝ์ฐ๋ฅผ ์ถ๊ฐํ์๋ค๋ฉด, left๋ฅผ ์ฐพ๋ ๋์์ right ํํธ ์ฐ์ฐ์ ํ์ง ์๊ณ , ๋ฐ๋๋ก letf๋ฅผ ์ถ๊ฐํ์๋ค๋ฉด right ๋ฅผ ์ฐพ๋ ๋์ left ์ฐ์ฐ์ ํ์ง ์๋ ๊ฒ์ด ๋๋ฒ์งธ ์ฝ๋์ด๋ค.
์๋๊ฐ ์ฒซ๋ฒ์งธ ์ฝ๋, ์์๊ฐ ๋๋ฒ์งธ ์ฝ๋์ด๋ค. right๋ฅผ ํ๋ฒ ๋ฃ์์ผ๋ฉด ๋์ด์ right๋ ๋ฃ์ง ์๊ณ , left๋ฅผ ํ๋ฒ ๋ฃ์์ผ๋ฉด ๋์ด์ left๋ฅผ ๋ฃ์ง ์๊ธฐ์ ์ฐจ์ด๊ฐ ๋๋ ๊ฒ์ด๋ค. ์ฆ ๋๋ฒ์งธ ์ฝ๋์ ํ๋ณด๊ตฐ ๋ฆฌ์คํธ์ ์์์ ๊ฐฏ์๋ ์ต๋ 3๊ฐ์ด๋ค.
๐ ๋ฌธ์ ๋งํฌ : ๋ฆฌ๋ชจ์ปจ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1331๋ฒ: ๋์ดํธ ํฌ์ด - ํ์ด์ฌ (0) | 2022.06.13 |
---|---|
[๋ฐฑ์ค] 15312๋ฒ: ์ด๋ฆ ๊ถํฉ - ํ์ด์ฌ (1) | 2022.06.13 |
[๋ฐฑ์ค] 13565๋ฒ: ์นจํฌ - ํ์ด์ฌ (0) | 2022.06.09 |
[๋ฐฑ์ค] 1926๋ฒ: ๊ทธ๋ฆผ - ํ์ด์ฌ (0) | 2022.06.08 |
[๋ฐฑ์ค] 2448๋ฒ: ๋ณ์ฐ๊ธฐ - ํ์ด์ฌ (0) | 2022.06.06 |