문제번호 15721 알고리즘 : ? 난이도 : 문제 15721 접근 내가 풀기 위해 접근했던 순서 가정 풀기 전에 ~ 식으로 풀면 되겠다. 등. 풀어보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; public class Main { static int number = 0; static int connections = 0; static int count = 0; static boolean[] visit; static List<Integer>[] computers; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); number = Integer.parseInt(br.readLine()); connections = Integer.parseInt(br.readLine()); visit = new boolean[number + 1]; computers = new List[number + 1]; for (int i = 0; i < number + 1; i++) { computers[i] = new ArrayList<Integer>(); } StringTokenizer st; for (int i = 0; i < connections; i++) { st = new StringTokenizer(br.readLine()); int first = Integer.parseInt(st.nextToken()); int second = Integer.parseInt(st.nextToken()); computers[first].add(second); computers[second].add(first); } dfs(1); System.out.println(count); } public static void dfs(int start) { if (!visit[start]) { visit[start] = true; count++; } for (int i = 0; i < computers[start].size(); i++) { dfs((int)computers[start].get(i)); } } } 시행착오 풀 면서 자신이 했던 시행착오들 참고자료 함께 보면 좋은 글, 링크 등. 문제번호 알고리즘 : dfs 난이도 : 문제 1012 접근 내가 풀기 위해 접근했던 순서 가정 풀기 전에 ~ 식으로 풀면 되겠다. 등. 풀어보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; public class Main { static int number = 0; static int[] time; static int[] price; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); number = Integer.parseInt(br.readLine()); StringTokenizer st; for (int i = 0; i < number; i++) { st = new StringTokenizer(br.readLine()); time = new int[st.countTokens()]; price = new int[st.countTokens()]; } int[] dp = new int[number + 1]; for (int i = 0; i < number; i++) { if (i + time[i] <= number) { //범위에 벗어나지 않는다면 dp[i + time[i]] = Math.max(dp[i + time[i]], dp[i] + price[i]); }//if dp[i + 1] = Math.max(dp[i + 1], dp[i]); //다음dp=현재 누적값vs 다음 누적값 }//for System.out.println(dp[number]); } } 시행착오 참고자료 문제번호 알고리즘 : 난이도 : 문제 접근 내가 풀기 위해 접근했던 순서 가정 풀기 전에 ~ 식으로 풀면 되겠다. 등. 풀어보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; public class Main { static int number = 0; static int[] time; static int[] price; public static void main(String[] args) throws IOException { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int T = Integer.parseInt(br.readLine()); for(int i=0;i<T;i++) { String W = br.readLine(); int K = Integer.parseInt(br.readLine()); int min = 10001, max = 0; ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); for(int a=0;a<26;a++) { list.add(new ArrayList<>()); } //W 탐색 for(int j=0;j<W.length();j++) { int unicode = W.charAt(j) - 97; list.get(unicode).add(j); //어떤 알파벳(W[j])가 K번 나왔을 때 연속 문자열 길이를 구한다 int size = list.get(unicode).size(); if(size >= K) { int start = list.get(unicode).get(size - K); int end = list.get(unicode).get(size-1); int len = end - start + 1; if(len<min) { //System.out.println("min: "+end+" "+start); min = len; } if(len>max) { //System.out.println("max: "+end+" "+start); max = len; } } } if(min==10001) { sb.append("-1\n"); continue; } sb.append(min+" "+max+"\n"); } System.out.println(sb.toString()); } } 시행착오 풀 면서 자신이 했던 시행착오들 참고자료 함께 보면 좋은 글, 링크 등.