티스토리 뷰
1) 생각
주어진 부등호 조건을 만족하는 제일 작은 수와 제일 큰 수를 구해야한다. 특징으로 0도 포함된다. 모든 수를 한 번씩만 쓸 수 있으므로 방문 조건을 추가해서 각 수마다 0~9까지 비교해서 판단하였다. 0부터 쭉 비교해서 나아가면 자연스럽게 List에 추가되어있는 수중 Index 0에 저장된 수가 작은 수 마지막에 저장된 수가 가장 큰 수가 된다. 조건 문을 통해 < 와 > 를 판단하고 if문을 통해 이전 숫자와 현 숫자를 비교하였는데 자꾸 오류가나서 살펴보니 한 줄이라 조건문에 { } 를 사용하지 않고 작성하였더니 이클립스가 맨 위의 if문과 짝지어져어할 else if문을 문단에 상관없이 계속 바로 위의 if문과 짝지어줘서 그런것이였다.
2) 방안
조건문에 { }를 추가하여 구분하여줬다. 0~9 까지 들어가는 문제이므로 N-Queen 문제랑 비슷하게 이번 숫자가 조건에 만족안되면 사용하지 않는 식으로 문제를 해결하였다.
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 43 44 | import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main{ static int k; static String[] arr; public static void main(String[] args) { Scanner sc = new Scanner(System.in); k = sc.nextInt(); sc.nextLine(); // < or > arr = sc.nextLine().split(" "); visited = new boolean[10]; result = new ArrayList<>(); for(int i=0;i<10;i++) { visited[i] = true; solve(0,i,String.valueOf(i)); } System.out.println(result.get(result.size()-1)); System.out.println(result.get(0)); } static boolean[] visited; static List<String> result; private static void solve(int cnt,int left, String t) { if(cnt==k) { result.add(t); visited[left] = false; return; } for(int i=0;i<10;i++) { // 방문 판단 if(visited[i]) continue; if(left==i) continue; // 이전 수랑 부호 판단 if(arr[cnt].equals(">")) {if(left<i) continue;} else if(left>i) continue; visited[i] = true; solve(cnt+1,i,t+i); } visited[left] = false; } } | cs |
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2193번 이친수 (0) | 2018.08.20 |
---|---|
[백준] 1339번 단어 수학 (0) | 2018.08.19 |
[백준] 1748번 수 이어 쓰기 1 (0) | 2018.08.18 |
[백준] 6064번 카잉달력 (0) | 2018.08.18 |
[백준] 14500번 테트로미노 (0) | 2018.08.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday