https://www.acmicpc.net/problem/14620 풀이arr은 입력 받은 값이고 sumArr은 자신의 좌표를 포함한 상하좌우의 총합을 저장하는 배열이다.이 문제는 배열을 전체 탐색하면서 모든 경우의 수를 고려해야 한다.dfs()에서 모든 좌표에 대해서 탐색을 돌면서 방문하지 않은 좌표에 대해서 재귀적으로 호출한다. 현재 좌표를 방문 처리하고 해당 좌표에 대해서 다시 탐색을 한다. 탐색이 종료되면 방문 기록을 지워서 모든 경우의 수를 고려할 수 있도록 한다. 참고로 x, y = 1 ~ N -1 까지 탐색하는 이유는 sumArr 배열의 모서리 부분은 모두 0이 저장되어 있기 때문에 탐색할 필요가 없다. 모서리 부분은 꽃을 심을 수 없는 영역이기 때문이다.코드import java.io.*;i..
https://www.acmicpc.net/problem/14889풀이처음에는 스타트 값을 더하기위해 인덱스를 저장한 배열, 링크를 위한 배열을 별도로 생성했다. 근데 도저히 코드로 어떻게 풀어나가야할지 떠오르지가 않아 다른 사람의 방법을 선택했다. visited 배열을 사용하여 true인 인덱스는 start에 더하고, false는 link에 더한다. dpeth가 N / 2일 때 계산을 하는 이유는 문제에서 설명하길 팀 인원은 N / 2명이라고 명시되어 있기 때문이다. calculate()에서 i의 범위를 N까지하면 j와 중복되는 인덱스가 발생하기 때문에 N - 1로 설정한다. N이 4일 때의 예시이다.i = 0j = 1, 2, 3i = 1j = 2, 3i = 2j = 3i = 3j = 3코드import..
https://www.acmicpc.net/problem/1931 코드import java.io.*;import java.util.*;public class Main { static int N; static List meetings = new ArrayList(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); N = Integer.parseInt(br.readLine()); StringTokenizer st; for (int i = 0; i { ..
https://www.acmicpc.net/problem/13904 문제 풀이List에 int[] 형태(day, 점수)로 값을 모두 저장하고 1차원 배열 값(day)을 기준으로 오름차순으로 정렬한다. day의 초기값에는 과제의 기간이 가장 긴 날짜를 저장한다. 반복문에서는 0 ~ N까지 모든 과제를 돌면서 제출 기간이 남은 과제를 찾는다. 기간이 아직 남은 과제 중에서 점수를 가장 많이 주는 과제를 찾으면 된다. ex)입력 :74 604 401 202 503 304 106 5입력받은 값을 day를 기준으로 오름차순 정렬한다.1 202 503 30 4 60 4 404 106 5 먼저 과제 제출 기간이 가장 많이 남은 6을 day에 저장한다.6일 보다 기간이 긴 과제는 없으므로 sum + 5를 한다. -> ..
https://www.acmicpc.net/problem/1766 문제 풀이문제 조건 중에 2가지를 가져온 것인데, 여기서 위상 정렬을 사용해야겠다고 생각을 했다. 원래라면 번호가 낮은 문제가 쉽기 때문에 먼저 풀어야겠으나, 1번 조건에서 먼저 푸는 것이 좋은 문제가 있다면 해당 문제를 풀어야 한다고 한다.먼저 푸는 것이 좋은 문제가 있는 문제는, 먼저 푸는 것이 좋은 문제를 반드시 먼저 풀어야 한다.가능하면 쉬운 문제부터 풀어야 한다.1 ~ 4번까지 4개의 문제가 있을 때, 원래라면 1 -> 2 -> 3 -> 4 순서대로 풀어야 풀기 쉽지만, 2번을 먼저 풀어야 1번을 쉽게 풀 수 있다는 조건이 걸린 것이다. 마치 2번에서 사용된 개념을 이용하여 1번을 풀 수 있는 느낌이다. 또한 우선순위 큐를 사용해..