- 알고리즘 분류 : 구현 - 사용 언어 : JAVA - 문제 요점 한 사람이 같은 대상에게 여러번 신고한 것은 1번으로 간주한다. 필자는 바로 떠올린 알고리즘으로 풀어버렸는데, HashMap을 사용하면 훨씬 간결하고 편하게 구현할 수 있을 것이다. 소스 설명은 주석을 참고해주세요. import java.util.ArrayList; import java.util.StringTokenizer; public class Main { public static int[] solution(String[] id_list, String[] report, int k) { // 각 사용자가 누구를 신고했는 지 저장해두는 리스트 ArrayList reportList = new ArrayList(); // 각 사용자가 받은 ..
Algorithm
- 알고리즘 분류 : 구현, 조합 - 사용 언어 : JAVA - 문제 요점 유지시킬 치킨 집의 갯수가 주어지니, 조합을 이용하여 치킨 집의 경우의 수를 구한다. 경우마다 집을 기준으로 치킨집의 최단경로를 구한다. 소스 설명은 주석을 참고해주세요. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.StringTokenizer; public class Main { // N : 도시의 크기 (NxN) // M : 유지시킬 치킨집의 갯수 public static int N,..
- 알고리즘 분류 : 다익스트라 - 사용 언어 : JAVA - 문제 요점 다익스트라를 이용하여 만나는 벽의 최소 수를 구하는 문제 DFS를 이용하여 풀어봤는데, 이 경우 시간초과로 발생했다. - DFS import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.PriorityQueue; import java.util.StringTokenizer; public class Main { // 상하좌우 이동 public static int[] amove = {-1, 0, 1, 0}; public static int[] bmove =..
- 알고리즘 분류 : 그리디 - 사용 언어 : JAVA - 문제 요점 점수를 입력받는 것이 아닌, 등수를 입력받는 것임 (중요) 나를 제외한 모든 참가자와 비교를 해야함. 서류 등수와 면접 등수가 있음. 어떤 지원자 A의 성적이 다른 어떤 지원자 B의 성적에 비해 서류 심사 결과와 면접 성적이 모두 떨어진다면 A는 결코 선발되지 않는다. 서류 등수를 배열의 인덱스로 두고, 배열의 값을 면접 등수로 둔다. 이해가 잘 안됐던 문제이며, 이중 반복문을 쓰면 시간 제한으로 인해 쉽지 않았던 문제이다. 아래의 블로그를 보고 방향성을 잡았다. 참고한 블로그 : https://kosaf04pyh.tistory.com/113 [알고리즘 문제] 백준1946 - 신입사원 문제는 신입사원들의 서류/면접 성적이 있을 때 이 ..
- 알고리즘 분류 : 정렬 및 구현 - 사용 언어 : JAVA - 문제 요점 각 사람마다 소요되는 시간을 오름차순 정렬 후 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하는 문제 소스 설명은 주석을 참고해주세요. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { // N : 사람의 수 public static int N; // arr : 각 사람마다 걸리는 시간을 나열한 배열 public static int[] arr; public sta..
- 알고리즘 분류 : 다익스트라 알고리즘 - 사용 언어 : JAVA - 문제 요점 1번 노드에서 시작하여 V1번 노드, V2번 노드를 거친 후 N번 노드까지 가는 최소 비용을 구하는 문제 (1번 노드 → V1번 노드 → V2번 노드 → N번 노드) OR (1번 노드 → V2번 노드 → V1번 노드 → N번 노드) 1번 노드, V1번 노드, V2번 노드를 기준으로 한 최단 경로를 구하면 풀이 가능. 소스 설명은 주석을 참고해주세요. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import ja..
- 알고리즘 분류 : 이분탐색 - 사용 언어 : JAVA - 문제 요점 mid를 기준으로 좌 우를 탐색하며 재귀하는 방식 이분 탐색에서 응용한 것이 없으므로 쉽게 풀이 가능 소스 설명은 주석을 참고해주세요. import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { // 수열 public static int[] num; // 찾을 수 배열 public static int[] findNum; // 결과를 저장할 배 public static boolean[] answer; public static int N1,N..
- 알고리즘 분류 : 플로이드-와샬 알고리즘 - 사용 언어 : JAVA - 문제 요점 from 도시에서 to 도시로 가는 노선이 여러개가 있을 수 있으니 최소 비용만 기록한다. 갈 수 없는 곳은 0으로 출력한다. 위 2가지만 유의하여 풀이하면 쉽게 풀이가 가능합니다. 소스 설명은 주석을 참고해주세요. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { // N : 도시의 수 // M : 노선의 수 public static int N, M; // 노선 정..