fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void) {
  5. int num[6]={'\0', },array_except[10]={'\0', }, array_use[10]={'\0', };
  6. int num_gap_move_pre=0, num_gap_move_now=0, num_comp[6]={'\0', };
  7. int num_ori=0, num_tar=0, num_gap_pl=0,num_except=0, num_gap_move=0;
  8. int i, t, s, u=0;
  9. int a = 0, b=0;
  10. int same = 0;
  11.  
  12. scanf("%d",&num_ori);
  13. scanf("%d",&num_except);
  14. for(i=0;i<num_except;i++)
  15. scanf("%d",&array_except[i]);
  16.  
  17. for(i=0;i<10;i++)
  18. {
  19. array_use[i-u] = i;
  20. for(t=0;t<num_except;t++)
  21. if(i==array_except[t])
  22. {
  23. u++;
  24. break;
  25. }
  26. }
  27.  
  28. for(i=100000;i>=1;i=i/10) //입력값을 자릿수별로 분할
  29. {
  30. if(a==0&&num_ori/i!=0)
  31. {
  32. num[a] = num_ori/i;
  33. a++;
  34. }
  35. else if(a!=0)
  36. {
  37. num[a] = (num_ori/i)%10;
  38. a++;
  39. }
  40. }
  41.  
  42. if(num_ori == 100) // +- 버튼으로 이동할때의 경우 눌러야 하는 횟수 추출
  43. same = 1;
  44. else if (num_ori == 0)
  45. same = 2;
  46. else
  47. {
  48. num_gap_pl = abs(num_ori - 100);
  49. }
  50.  
  51. if(same == 1) // 숫자 이동 후 +- 버튼으로 이동할 때 눌러야하는 횟수
  52. printf("0");
  53. else if (same == 2)
  54. printf("1");
  55. else
  56. {
  57. for(i=0;i<a;i++)
  58. {
  59. for(t=0;t<10-num_except;t++)
  60. {
  61. if(num[i]==array_use[t])
  62. {
  63. num_comp[i] = array_use[t];
  64. break;
  65. }
  66. else
  67. {
  68. num_gap_move_now = abs(num[i] - array_use[t]);
  69. if(t==0)
  70. {
  71. num_gap_move_pre = num_gap_move_now;
  72. num_comp[i] = array_use[t];
  73. }
  74. else if(num_gap_move_now < num_gap_move_pre)
  75. {
  76. num_gap_move_pre = num_gap_move_now;
  77. num_comp[i] = array_use[t];
  78. }
  79. }
  80. }
  81. num_gap_move_pre = 0;
  82. num_gap_move_now = 0;
  83. }
  84.  
  85. for(i=1;i<=100000;i=i*10)
  86. {
  87. if(a>0)
  88. {
  89. num_gap_move = num_gap_move + (num_comp[a-1]*i);
  90. a--;
  91. b++;
  92. }
  93. }
  94. num_gap_move = abs(num_gap_move - num_ori) + b;
  95.  
  96. if(num_gap_move>num_gap_pl)
  97. num_gap_move = num_gap_pl;
  98.  
  99. printf("%d",num_gap_move);
  100. }
  101. return 0;
  102. }
  103.  
Success #stdin #stdout 0s 4244KB
stdin
499999
8
0 2 3 4 6 7 8 9
stdout
55562