티스토리 뷰
1) 생각
큰 고민없이 리모콘 숫자만 맞추는 식으로 코드를 작성한 후 '틀렸습니다'를 맛보고 고민을 해서 코드를 작성하였다.
2) 방안
최대 999999 개만 살펴보면 되므로 모든 Case를 살펴보았고, 각각의 숫자를 검사하여 고장난 버튼의 숫자가 있으면 건너뛰고 그렇지 않으면 N값 과의 차이와 그 숫자를 min으로 저장해 둔 후 min의 최소값이 되는시점(N값과의 차이가 가장 작은시점 -> 0부터 검사하므로 점점 작아지다 최저 값을 찍은 뒤 점점 커짐) 에서 반복문을 빠져나왔다.
이후 한 번 더 틀린것을 확인하고 101 같은경우 위의 반복문만 확인하면 4가 나오겠지만 기본 채널이 100번이므로 +1만 해주면되는것을 발견하고 100과 N의 차와 위에서 구한 최소값을 비교하여 최소값을 출력하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | import java.util.Scanner; public class Main{ static int channel; public static void main(String[] args) { Scanner sc = new Scanner(System.in); channel = sc.nextInt(); int n = sc.nextInt(); int[] button = new int[10]; for(int i=0;i<n;i++) button[sc.nextInt()] = -1; if(channel==100) System.out.println(0); else System.out.println(solve(button)); } static int min = Integer.MAX_VALUE; private static int solve(int[] button) { int min = Integer.MAX_VALUE; boolean flag = true; String t = ""; String tMin = ""; for(int i=0;i<1000000;i++) { t = i+""; flag = true; for(int j=0;j<t.length();j++) { if(button[t.charAt(j)-'0']==-1) { flag = false; break; } } if(flag) { if(min> Math.abs(channel-i)) min = Math.abs(channel-i); else if(min<=Math.abs(channel-i)) break; tMin = t; } } int result = min+tMin.length(); int result2 = Math.abs(100-channel); return result>result2?result2:result; } } | cs |
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 6064번 카잉달력 (0) | 2018.08.18 |
---|---|
[백준] 14500번 테트로미노 (0) | 2018.08.17 |
[백준] 1261번 탈출 (0) | 2018.08.15 |
[백준] 12851번 숨바꼭질 2 (0) | 2018.08.15 |
[백준] 1261번 알고스팟 (0) | 2018.08.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday