πŸ“š Study/Baekjoon

[Gold IV] 1107 - 리λͺ¨μ»¨

윰갱 2025. 4. 25. 16:32

문제

μˆ˜λΉˆμ΄λŠ” TVλ₯Ό 보고 μžˆλ‹€. μˆ˜λΉˆμ΄λŠ” 채널을 돌리렀고 ν–ˆμ§€λ§Œ, λ²„νŠΌμ„ λ„ˆλ¬΄ μ„Έκ²Œ λˆ„λ₯΄λŠ” λ°”λžŒμ—, 일뢀 숫자 λ²„νŠΌμ΄ κ³ μž₯났닀.

리λͺ¨μ»¨μ—λŠ” λ²„νŠΌμ΄ 0λΆ€ν„° 9κΉŒμ§€ 숫자, +와 -κ°€ μžˆλ‹€. +λ₯Ό λˆ„λ₯΄λ©΄ ν˜„μž¬ λ³΄κ³ μžˆλŠ” μ±„λ„μ—μ„œ +1된 μ±„λ„λ‘œ μ΄λ™ν•˜κ³ , -λ₯Ό λˆ„λ₯΄λ©΄ -1된 μ±„λ„λ‘œ μ΄λ™ν•œλ‹€. 채널 0μ—μ„œ -λ₯Ό λˆ„λ₯Έ κ²½μš°μ—λŠ” 채널이 λ³€ν•˜μ§€ μ•Šκ³ , 채널은 λ¬΄ν•œλŒ€ 만큼 μžˆλ‹€.

μˆ˜λΉˆμ΄κ°€ μ§€κΈˆ μ΄λ™ν•˜λ €κ³  ν•˜λŠ” 채널은 N이닀. μ–΄λ–€ λ²„νŠΌμ΄ κ³ μž₯λ‚¬λŠ”μ§€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 채널 N으둜 μ΄λ™ν•˜κΈ° μœ„ν•΄μ„œ λ²„νŠΌμ„ μ΅œμ†Œ λͺ‡ 번 λˆŒλŸ¬μ•Όν•˜λŠ”μ§€ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μˆ˜λΉˆμ΄κ°€ μ§€κΈˆ 보고 μžˆλŠ” 채널은 100λ²ˆμ΄λ‹€.

μž…λ ₯

첫째 쀄에 μˆ˜λΉˆμ΄κ°€ μ΄λ™ν•˜λ €κ³  ν•˜λŠ” 채널 N (0 ≤ N ≤ 500,000)이 μ£Όμ–΄μ§„λ‹€. λ‘˜μ§Έ μ€„μ—λŠ” κ³ μž₯λ‚œ λ²„νŠΌμ˜ 개수 M (0 ≤ M ≤ 10)이 μ£Όμ–΄μ§„λ‹€. κ³ μž₯λ‚œ λ²„νŠΌμ΄ μžˆλŠ” κ²½μš°μ—λŠ” μ…‹μ§Έ μ€„μ—λŠ” κ³ μž₯λ‚œ λ²„νŠΌμ΄ μ£Όμ–΄μ§€λ©°, 같은 λ²„νŠΌμ΄ μ—¬λŸ¬ 번 μ£Όμ–΄μ§€λŠ” κ²½μš°λŠ” μ—†λ‹€.

좜λ ₯

첫째 쀄에 채널 N으둜 μ΄λ™ν•˜κΈ° μœ„ν•΄ λ²„νŠΌμ„ μ΅œμ†Œ λͺ‡ 번 λˆŒλŸ¬μ•Ό ν•˜λŠ”μ§€λ₯Ό 좜λ ₯ν•œλ‹€.

예제 μž…λ ₯ 1 λ³΅μ‚¬

5457
3
6 7 8

예제 좜λ ₯ 1 λ³΅μ‚¬

6

예제 μž…λ ₯ 2 λ³΅μ‚¬

100
5
0 1 2 3 4

예제 좜λ ₯ 2 λ³΅μ‚¬

0

예제 μž…λ ₯ 3 λ³΅μ‚¬

500000
8
0 2 3 4 6 7 8 9

예제 좜λ ₯ 3 λ³΅μ‚¬

11117

예제 μž…λ ₯ 4 λ³΅μ‚¬

100
3
1 0 5

예제 좜λ ₯ 4 λ³΅μ‚¬

0

예제 μž…λ ₯ 5 λ³΅μ‚¬

14124
0

예제 좜λ ₯ 5 λ³΅μ‚¬

5

예제 μž…λ ₯ 6 λ³΅μ‚¬

1
9
1 2 3 4 5 6 7 8 9

예제 좜λ ₯ 6 λ³΅μ‚¬

2

예제 μž…λ ₯ 7 λ³΅μ‚¬

80000
2
8 9

예제 좜λ ₯ 7 λ³΅μ‚¬

2228

# 풀이 방법

일단 μ‚¬μš©κ°€λŠ₯ν•œ λ²„νŠΌ μ€‘μ—μ„œ 숫자 N에 κ°€μž₯ κ°€κΉŒμš΄ 숫자λ₯Ό κ΅¬ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.

근데 이 μˆ«μžλŠ” N보닀 μž‘μ„ μˆ˜λ„ 클 μˆ˜λ„ μžˆλ‹€.

 

이 숫자λ₯Ό μ–΄λ–»κ²Œ ꡬ할지 머리가 μ•„νŒ λ‹€..

gptμ—κ²Œ λ¬Όμ–΄λ³΄λ‹ˆ λͺ¨λ“  경우의 수λ₯Ό λ‹€ κ³ λ €ν•˜λΌκ³  ν–ˆκ³ .. 이러면 λ„ˆλ¬΄ 였래걸릴 것 같은데라고 μƒκ°ν–ˆμ§€λ§Œ κ²°κ΅­ 톡과됐닀.


# μ½”λ“œ

# 2025-04-25 15:36-16:20
import sys
sys.stdin = open("input.txt","r")

N = int(sys.stdin.readline().strip())
M = int(sys.stdin.readline().strip())
if M > 0:
    broken = list(map(int,sys.stdin.readline().split()))
else:
    broken = []
avail = list(set(range(10)) - set(broken))

# κ°€μž₯ κ°€κΉŒμš΄ 수 μ°ΎκΈ°
min_clicks = abs(N-100) # +,-만 κ΅¬ν•΄μ„œ κ°€λŠ” 경우
for num in range(1_000_000):
    str_num = str(num)
    if all(int(d) in avail for d in str_num):
        press = len(str_num)
        move = abs(num-N)
        min_clicks = min(min_clicks, press + move)

print(min_clicks)