diff --git "a/2022/[Week29 - Mix]/\352\271\200\354\243\274\355\230\204/Q1987.java" "b/2022/[Week29 - Mix]/\352\271\200\354\243\274\355\230\204/Q1987.java" new file mode 100644 index 0000000..4665d93 --- /dev/null +++ "b/2022/[Week29 - Mix]/\352\271\200\354\243\274\355\230\204/Q1987.java" @@ -0,0 +1,89 @@ +// 1987번 알파벳 (G4) [백트래킹] +/* +<문제 정보> + 1. + +<변수 범위> + 1. + +<프로그램 진행> + 1. + +<필요 함수> + 1. + + */ + + +import java.io.*; +import java.util.HashSet; +import java.util.Set; +import java.util.StringTokenizer; + +public class Q1987 { + static int N; + static int M; + static int answer = -1; + static char[][] map; + static boolean[] visitedAlphabet = new boolean[26]; + + static int[][] DIR = {{1,0}, {0,1}, {-1,0}, {0,-1}}; + + public static void main(String args[]) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringBuilder sb = new StringBuilder(); + StringTokenizer st; + + // ******************** 입력 & 초기화 ******************** + st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + map = new char[N][M]; + for (int i=0; i= 0 && nextY >=0 && nextX < N && nextY < M; + if (inRange && !visitedAlphabet[alphabetToIndex(map[nextX][nextY])]) { + int alphabetIndex = alphabetToIndex(map[nextX][nextY]); + hasPossibleRoad = true; + visitedAlphabet[alphabetIndex] = true; + dfs(depth+1, nextX, nextY); + visitedAlphabet[alphabetIndex] = false; + } + } + + if (!hasPossibleRoad) { + answer = Math.max(answer, depth); +// System.out.printf("[OUT - No Path] depth : %d, x : %d, y : %d Alphabet : %c \n", depth, x, y, map[x][y]); + return; + } +// System.out.printf("[OUT - All Searched] depth : %d, x : %d, y : %d Alphabet : %c \n", depth, x, y, map[x][y]); + } + + public static int alphabetToIndex (char alphabet) { + return alphabet - 'A'; + } +} diff --git "a/2022/[Week29 - Mix]/\352\271\200\354\243\274\355\230\204/Q2212.java" "b/2022/[Week29 - Mix]/\352\271\200\354\243\274\355\230\204/Q2212.java" new file mode 100644 index 0000000..7bf2879 --- /dev/null +++ "b/2022/[Week29 - Mix]/\352\271\200\354\243\274\355\230\204/Q2212.java" @@ -0,0 +1,60 @@ +// 2212번 센서 (G5) [정렬] +/* +<문제 정보> + 1. + +<변수 범위> + 1. + +<프로그램 진행> + 1. + +<필요 함수> + 1. + + */ + + +import java.io.*; +import java.util.Arrays; +import java.util.Collections; +import java.util.StringTokenizer; + +public class Q2212 { + + public static void main(String args[]) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringBuilder sb = new StringBuilder(); + StringTokenizer st; + + // ******************** 입력 & 초기화 ******************** + int N = Integer.parseInt(br.readLine()); + int K = Integer.parseInt(br.readLine()); + int[] sensors = new int[N]; + st = new StringTokenizer(br.readLine()); + for (int i=0; i + 1. + +<변수 범위> + 1. + +<프로그램 진행> + 1. + +<필요 함수> + 1. + + */ + + +import java.io.*; +import java.util.*; + +public class Q2668 { + static int N; + static int[] arr; + static boolean[] visited; + static int answer = 0; + + public static void main(String args[]) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringBuilder sb = new StringBuilder(); + StringTokenizer st; + + // ******************** 입력 & 초기화 ******************** + N = Integer.parseInt(br.readLine()); + arr = new int[N+1]; + for (int i=1; i<=N; i++) { + arr[i] = Integer.parseInt(br.readLine()); + } + + // ******************** 메인 로직 ******************** + visited = new boolean[N+1]; + for (int i=1; i<=N; i++) { + if (!visited[i]) { + search(i); + } + } + + // ******************** 정답 출력 ******************** + sb.append(answer).append("\n"); + for (int i=1; i<=N; i++) { + if (visited[i]) sb.append(i).append("\n"); + } + + bw.write(sb.toString()); + bw.flush(); + bw.close(); + br.close(); + } + + public static void search (int n) { + int start = n; + int end = 0; + Set visitList = new HashSet<>(); + boolean isOriginalPoint = false; + + while ( !isOriginalPoint ) { + end = arr[start]; + if ( visited[end] || visitList.contains(end) ) break; + visitList.add(end); + if (end == n) { + isOriginalPoint = true; + } else if ( start == end) { + break; + } else { + start = end; + } + } + + if (isOriginalPoint) { + answer += visitList.size(); + for (int point : visitList) { + visited[point] = true; + } + } + } +} diff --git "a/2022/[Week29 - Mix]/\352\271\200\354\243\274\355\230\204/temp" "b/2022/[Week29 - Mix]/\352\271\200\354\243\274\355\230\204/temp" deleted file mode 100644 index e69de29..0000000