첫번째 코드를 구현할 때 각 자릿수를 누를 수 있는 버튼 중 그 차이가 가장 작은 값을 불러와서 정답을 내렸다. 그러나 테스트케이스7번과 같이 target channel보다 자릿수가 작은 경우가 답인 경우에는 오답이 발생했다.
해당 케이스를 따로 구현하려하다가 단순히 전체를 탐색했을 때 답을 구할 수 있음을 알 수 있었다.
첫번째 코드(unsolved) - about test_case7
"""
https://www.acmicpc.net/problem/1107
"""
# test_case 7번 해결
channel = 100
N = input()
M = int(input())
if M != 0:
broken = set(map(int, input().split()))
else:
broken = set([])
nums = set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
buttons = list(nums - broken)
ans = []
for num in N:
if int(num) in buttons:
ans.append(0)
else:
ans.append(min(map(lambda x: abs(x - int(num)), buttons)))
answer = 0
for idx, i in enumerate(ans):
answer += i * 10 ** (len(ans) - idx - 1)
print(min(answer + len(N), abs(int(N) - channel)))
두번째 코드(solved)
"""
https://www.acmicpc.net/problem/1107
"""
N=int(input())
M=int(input())
if M==0: broken=[]
else: broken=input().split()
answer=abs(100-N) # 현재 채널 100에서 그냥 옮길 때 누르는 횟수
for num in range(1000001): # 이동하려는 채널과는 별개로 채널은 무한히 존재한다
for idx,i in enumerate(str(num)):
if i in broken:
break
elif idx==len(str(num))-1: # num이 누를 수 있는 번호일 경우
answer=min(answer,abs(N-num)+len(str(num)))
print(answer)
때때로 안 풀릴 땐 완전 탐색도 시도해보기
EOF Error는 "End of File Error"의 줄임말로, 파일 또는 입력 스트림에서 더 이상 읽을 데이터가 없을 때 발생하는 오류를 나타낸다. M이 0일 때는 broken에 대한 입력이 발생하지 않는데 이 경우를 고려하지 않고 코드를 작성
두번째 풀이와 같다