//알고리즘 1. 조합문제 2. 모든 조합의 경우를 다 구해서 결과 출력 ※조합 연습하기 좋은문제 같음. import java.util.Arrays; import java.util.Scanner; public class 일곱난쟁이 { static int[] arr = new int[9]; static int[] numbers = new int[7]; static int max = 100, sum, ans; public static void main(String[] args) { Scanner sc = new Scanner(System.in); for (int i = 0; i < arr.length; i++) { arr[i] = sc.nextInt(); } combination(0, 0); } privat..
//알고리즘 1. 다익스트라 2. 간선과 노드가 많기 때문에 행렬보다는 리스트로 만드는게 유리할 듯. 3. 방문배열과 별개로 시야배열도 만들어서 갈 수 있는곳 체크해줘야함. -> 마지막 넥서스의 시야는 0으로 바꿔주면 다른 조건을 처리안해줘도 쉽게 풀 수 있음. 4. 거리값이 int 최대값을 넘어가기 때문에 dist 배열을 long형으로 만들어 줘야함. 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.Stri..
//알고리즘. 1. 부분집합으로 풀었던 문제를 DP테이블을 만들어 품. 2. 0/1 knapsack 처럼 정해진 칼로리에 담을 수 있는 칼로리만큼 담고 만족도를 합하여 구함. import java.util.Scanner; public class 햄버거다이어트_DP { static int T,N,L; public static void main(String[] args) { Scanner sc = new Scanner(System.in); T = sc.nextInt(); for (int tc = 1; tc
//알고리즘 1. 최대 20만까지인 배열이므로 완탐으로 풀면 시간초과 -> 아이디어를 요구하는 문제인듯. 2. 규칙대로 진행하면 버블정렬이 되는것을 알 수 있음. 3. W~B순으로 정렬하면 되니까 맨 뒤의 B부터 정렬할 횟수를 계산. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class 카드뒤집기 { static int T; static long Ans; static char[] arr; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new ..
//알고리즘 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..