//알고리즘 1. 우선순위 큐 사용 -> 카드 뭉치 2개를 꺼내서 더해야 하는데 적은 순서대로 2개를 꺼내서 더하는게 가장 적은 비교회수이기 때문에 우선순위 큐 사용 -> 예외케이스 : 카드 뭉치가 1개일 경우 비교회수가 0임. 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.PriorityQueue; public class 카드정렬하기_1715 { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new Buffere..
//알고리즘 1. 문자열문제 2. 1번 이상 나오는 알파벳은 알파벳 배열의 값이 0인지 확인하고 0일 경우 1값으로 저장 -> 단, 연속으로 나오면 패스 3. 배열의 값이 0인지 확인하고 1일 경우 그룹단어가 아님. 더보기 import java.util.Scanner; public class 그룹단어체커_1316 { static int N,ans,alpa[]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N =sc.nextInt(); ans = 0; for (int i = 0; i < N; i++) { alpa = new int[200]; String str = sc.next(); alpa[str.charAt(..
//알고리즘 1. 간단한 연산 2. HashSet 사용 -> 간단한 연산코드이지만 HashSet으로 결과를 저장하면 쉽게 구현할 수 있음 더보기 import java.util.HashSet; import java.util.Scanner; public class 나머지_3052 { static int arr[]; static final int div = 42; public static void main(String[] args) { Scanner sc = new Scanner(System.in); HashSet set = new HashSet(); for (int i = 0; i < 10; i++) { set.add(sc.nextInt()%42); } System.out.println(set.size())..
//알고리즘 1. 그래프 탐색 -> 트리 구조이고, bfs탐색 이라고 생각 함. 2. 인접 리스트 생성 3. 최소값 갱신 -> 기본값을 -1 로 설정해두면 친척관계가 아닐 때, 계산안해도 되서 편함. 더보기 import java.util.*; import java.io.*; public class 촌수계산_2644 { static int n,x,y,ans; static boolean[] v; static ArrayList[] list; static class Point{ int p,cnt; public Point(int p, int cnt) { super(); this.p = p; this.cnt = cnt; } } public static void main(String[] args) throws Num..
//알고리즘 1. 탐색 -> 최단거리를 구해야 하기 때문에 bfs 2. 4방 탐색이기 때문에 dr, dc 배열 생성 3. 맵의 모든 'L' 에서 전부 다 탐색해봐야 함 -> 방문배열을 모든 L에 대해서 다르게 가져가야 함. 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class 보물섬_2589 { static int L, W, ans; static char[][] map; static Queue q; static..
//알고리즘 1. 탐색 -> 깊이 우선 탐색 -> n 값이 100,000이므로 시간초과가 안 나도록 풀어야 함. 2. 방문배열 이외의 int 배열을 하나 더 사용하여 사이클 생성 시 cnt 값을 구함 -> 거쳐 온 노드들의 cnt값을 vNum 배열에 저장함 -> 사이클이 발생 시 해당 cnt값과 vNum에 들어있는 값으로 팀을 이룰 수 있는 사람들의 수를 구함 -> 거쳐간 노드들의 방문배열은 true로 체크해주고 vNum의 값은 재귀가 끝날 때, 0으로 다시 세팅해줌(백트래킹) 3. 결과값 = 노드수(n) - 팀을 이룰 수 있는 사람들의 수(ans) 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre..
//알고리즘 1. 그래프탐색 -> 인접리스트를 만들어 탐색 -> 모든 정점에서 탐색, 연결되어있는 노드는 방문체크해서 다시 탐색하지 않음. 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; public class 연결요소의개수_11724 { static int N, M, ans; static boolean[] v; static ArrayList[] list; public static void main(String[] args) throws IOException { Buffe..
//알고리즘 1. 다익스트라 -> 경우가 2가지임. (1 -> v1 -> v2 -> N , 1 -> v2 -> v1 -> N ) -> 우선순위큐를 사용하는 다익스트라로 구현 -> flag 변수를 만들어 가지 못하는 경우라면 flag를 true 로 바꿔주고 결과("-1") 출력 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.PriorityQueue; import java.util.StringTokenizer; public class 특정한최단경로_1504 {..
//알고리즘 1. dp 문제 -> 피보나치 수를 구하는 문제. -> dp 테이블을 만듦 -> dp[0] = 0, dp[1] = 1 고정하고 2번째 부터 시작 ※ 최대인덱스가 90이기 때문에 long형 dp 테이블 생성 더보기 import java.util.Scanner; public class 피보나치수2_2748 { static int n; public static void main(String[] args) { long dp[] = new long[91]; Scanner sc = new Scanner(System.in); n = sc.nextInt(); dp[0] = 0; dp[1] = 1; for (int i = 2; i
//알고리즘 1. bfs 탐색 -> 1차원 배열을 만들고 시작점에서 도착점까지 탐색 -> 방문배열을 사용하여 한번 갔던곳은 다시 못가게 만듦 매일 2차원 배열에서의 bfs만 풀다가 1차원 배열로 bfs탐색을 풀어보니까 새로웠다. 더보기 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class 숨바꼭질_1697 { static int T, K, arr[]; static boolean v[]; static int[] dr = { -1, 1, 2 }; static class Point { int r, cnt; public Point(int r, int cnt) { super(); this.r = r; t..