//알고리즘 1. 모든 경우를 다 해봐야하는 완탐문제 2. A일꾼의 일한 곳을 기준으로 B일꾼은 A일꾼이 일하지 않은 곳 전부 탐색. 3. 부분집합을 사용하여 나올 수 있는 가장 큰 수 저장. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 벌꿀채취 { static int T, N, M, C, map[][], max; public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new..
//알고리즘 1. 8방 체크 완전탐색문제. 2. 8방을 체크할 수 있는 dr, dc 배열을 만들고 시작함. 3. dfs를 돌리는데 방문배열을 따로 쓰지말고 기존의 map 배열을 초기화. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 현수막_14716 { static int M, N, map[][]; static int[] dr = { -1, -1, -1, 0, 1, 1, 1, 0 }; static int[] dc = { -1, 0, 1, 1, 1, 0, -1, -1 }; public static void..
//알고리즘 1. 모든 경우를 다 시도해봐야하는 완탐. 2. 처음에 순열로 생각하여 풀었지만 11! 이기 때문에 시간초과. 3. 중복순열로 생각하여 풀었더니 최대 4^11 이기때문에 충분히 가능하다고 판단. 4. 기존 입력값으로 주어진 operator 배열과 중복순열로 만들어진 oper배열과 비교하여 같을 때만 계산. 5. max값이 0으로 초기화해서 시작했지만 음수도 나올 수 있기 때문에 나올수 있는 최소값으로 초기화 -> 중요! import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import j..
알고리즘 1. 시작좌표부터 편의점좌표, 도착좌표까지 갈 수 있는 거리가 1000미터 이기 때문에 거리가 1000이하인 곳의 인접리스트를 만들어야 함. 2. 인접리스트와 방문배열을 이용하여 시작좌표를 기준으로 dfs를 돌려 도착좌표에 도달하면 정답 출력. ※ 주어진 좌표를 인접리스트로 만드는게 핵심임. (2차원 배열로 표시했다가는 메모리 초과가 날 듯..) import java.util.ArrayList; import java.util.Scanner; public class 맥주마시면서걸어가기_9205 { static int T, n, ans; public static void main(String[] args) { Scanner sc = new Scanner(System.in); T = sc.nextIn..
알고리즘 1. 알파벳 명물을 두 번 이상 보지 않도록 탐색하는 문제이기 때문에 갈 수 있는 모든곳을 탐색해야 함. 2. 방문배열을 알파벳수만큼 26개 boolean배열로 만듬. 3. 방문한곳의 알파벳 명물을 방문배열에 표시하여 갈 수 있는 모든 곳을 탐색. 4. depth가 최대 26이기 때문에 dfs로도 충분히 풀 수 있음. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Solution { static int T, R, C, Ans, max; static char[][] map; static boole..
알고리즘 1. 시뮬레이션 문제 2. 주어진 조건을 자세히 보고 구현하면 됨. 3. 상하좌우 배열을 만들어서 풀면 쉬움. 4. 체력이 많이 필요한 문제.. import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; class Solution { static int T, H, W, r, c, N; static char[][] map; static int[] dr = { -1, 1, 0, 0, }; static int[] dc = { 0, 0, -1, 1 }; public static void main(String[] args) throws FileNotFoundException { // Syste..
알고리즘 1. 부분집합을 구해 칼로리의 합을 구함. 2. 칼로리의 합이 제시한 칼로리보다 낮은경우 만족도의 합중 최대값을 저장함. 3. DP테이블을 만들어서 풀이할 수 있음. 추후 업로드 예정 import java.util.Scanner; public class Solution { static int T,N,L, arr[][],ans; static boolean[] v; public static void main(String[] args) { Scanner sc = new Scanner(System.in); T= sc.nextInt(); for (int tc = 1; tc
알고리즘 - 완전탐색 문제. - White와 Blue와 Red 전부 다 해보는 수밖에 없음. - 3중 for문으로 count값만 계산하여 최소값 저장. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 러시아국기같은깃발 { static int T, N, M, cnt = Integer.MAX_VALUE, wcount,rcount,bcount; static char map[][]; public static void main(String[] args) throws NumberFormatException, IOEx..
알고리즘 - 플로이드 워샬 기본문제. - 플로이드 워샬과 다익스트라의 차이점을 알아야 함. ※ 다익스트라 시간복잡도 : V E logV 플로이드 워샬 시간복잡도 : V^3 다익스트라 : 출발점에서 각 노드들간의 최소 거리. 플로이드 워샬 모든노드들의 최소 거리. * 다익스트라를 노드수 만큼 구했더니 실패한 문제. -> 이유 : 노드가100개 간선이 100000개 라서 100 * 100 * 100000 * log 100 = 시간초과인듯.. * 플로이드 워샬로 풀 경우 100^3 = 1,000,000 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays;..
알고리즘 - 4방탐색 - bfs - 최소값부터 시작하기 때문에 Priority Queue 사용 - 이미 계산한 값은 다음회차에 안해도 되기 때문에 증식한 값만 새로운 list에 저장한 후 큐의 모든 값이 계산되면(1회차) 저장한 리스트를 다시 큐에 넣어줌. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.StringTokenizer; public class 경쟁적전염_18405 { static int n, k, map[][]; static int[] ..