사실 이게 경우의 수가 엄청 많고 따로 조건문을 해주는 것도 코드가 굉장히 길어지며 사실상 불가능합니다.
근데 저는 귀신에 홀린건지
"아하 특정 i번째 숫자에 대해서 가장 가까운 숫자를 찾아주고! (ex : 4일때 금지숫자가 3 4 5 6 일 경우 가장 가까운 숫자는 2) 플러스 마이너스를 하면 되겠네!"
라고 해서 푼 문젠데..
딱봐도 식도 복잡하고 뭐..
저렇게 하면 10000에 대해서 1이 금지되어있으면 9999에서 1더하는게 더 빠른데
뭐 가장 가까운 숫자인 2로 들어가서 10000번 더해주는 불상사를 겪은 것...
한 두시간 넘게 끙끙대며 풀었는데 정녕 답이 안나오고 후반엔 알고리즘 자체가 잘못되었다는 것을 알고 절망한 상태로 인터넷 검색을해서 알고리즘을 보고 내 코드대로 다시한번 풀었다.
내가 찾은 알고리즘은 훨씬 간단했다
방금 위에서 내가 유추한 식에서 말했다 시피 가장 가까운 번호를 찾는것은 조건도 많아지고 힘들다그렇다면?
"모든 경우의 수를 보자"이래서 브루트 포스 문제였던 것임...
그렇다면 들어갈 수 있는 숫자는 500000 (오십만)이므로 6숫자임 대략 백만까지는 사용자가 숫자를 임의로 넣을 수 있음(예를들어 999,999 에서 찾아갈 수 있잖아, 사용자가 최대 50만 채널까지 찾는다 해도 저기서 새롭게 찾아갈 수 있음)
그럼 이제 남는 것은
1.i=0부터 1,000,000까지 금지된 숫자가 들어가는지 확인하고2. 횟수를 구해낸다. ( 횟수를 구해내는 것은 단순히 마이너스를 해주면 됨 / 왜냐? 505번에서 500번으로 갈때 빼주면 5번 움직이는거잖아)3.min 함수를 사용해서 최솟값을 계속 갱신4.맨 마지막 출력 전 100에서 타겟값을 뺀 절댓값과 최솟값 비교