////
Search
Duplicate
💯

[SWEA] 숫자가 같은 배수(JAVA 자바)

생성일
2022/11/16 12:56
태그
import java.util.Scanner; import java.io.FileInputStream; class Solution { static boolean[] visited; static char[] sChar; static int result; public static void main(String args[]) throws Exception { Scanner sc = new Scanner(System.in); int T; T = sc.nextInt(); for (int test_case = 1; test_case <= T; test_case++) { String s = sc.next(); char[] arr = new char[s.length()]; visited = new boolean[s.length()]; sChar = new char[s.length()]; result = 0; for (int i = 0; i < s.length(); i++) { arr[i] = s.charAt(i); } if (Integer.parseInt(s)<10 || s.equals("1000000")) { //예외처리 1의자리 수와 10^6인 백만 System.out.println("#" + test_case + " impossible"); } else { //dfs dfs(0, s.length(), arr); //0 , 문자열길이 , 배열 if (result == 1) { System.out.println("#" + test_case + " possible"); } else { System.out.println("#" + test_case + " impossible"); } } } } public static void dfs(int level, int cur, char[] original) { // 0 , 6, 142587 String num = ""; String oriNum = ""; if (level == cur) { //레벨을 이용히여 현재 트리 단계가 가장 아래에 오기까지 기다림 for (int i = 0; i < original.length; i++) {// dfs 돌리고 나서 만들어진 수를 String 형으로 만들어줌 num += sChar[i]; oriNum += original[i]; } if (!num.equals(oriNum) && Integer.parseInt(num) % Integer.parseInt(oriNum) == 0) { //만들어진 수가 원래 수가 아니고 만들어진 수를 원래 수로 나눴을 때 나머지가 0이면 배수이므로 // result에 1넣기 result = 1; } } for (int i = 0; i < original.length; i++) { // 문자열의 길이 만큼 for문 돌리기 if (visited[i] != true) { visited[i] = true; sChar[level] = original[i]; // 문자열을 트리의 깊이에 따라 하나 씩 더해 주기 dfs(level + 1, cur, original); // dfs 재귀를 돌 때마다 level에 1을 더해줌으로써 트리의 깊이를 아래로 늘려줌 visited[i] = false; //dfs가 재귀를 끝내고 나올 떄 visited를 false로 반환해주면서 다음 단계로 진행 } } } }
Java
복사
DFS 함수의 매개 변수로 level을 주는데 이는 트리의 깊이다.
한번 씩 돌때마다 트리의 깊이에다가 +1 을 해줌으로써 다음 깊이로 들어갈 수 있게하는게 포인트.
그리고 DFS를 트리 가장 아래까지 돌고 나올 때 각 인덱스 마다 visited 함수를 false로 반환 함으로써, 다음 경로를 찾을 때, visited배열을 false로 초기화 한 상태에서 사용하게 한다.

같은 태그의 다른 글 보기

Search
문제모음