문제 개요 원형으로 연속인 4개의 숫자가 주어졌을 때 시작위치를 변경해서 구할 수 있는 가장 작은 수인 시계수를 구하고 이 시계수가 모든 시계수 중 몇 번째로 작은 수인지 구하는 문제입니다. 문제 접근 가장 작은 시계수를 구하는 방법 가능한 조합의 수는 총 4개 밖에 없으므로 반복문을 통해 주어진 숫자들에서 가장 작은 시계수를 구할 수 있습니다. 몇 번째로 작은 시계수인지 확인하는 방법 처음에는 적절한 수식으로 나타내는 것이 맞다고 생각했는데, 마땅히 생각나지 않아서 해당 숫자가 시계수인지 여부를 확인하는 배열을 만들어서 사용해야 될 것 같습니다. 주어진 수가 시계수인지 확인하려면 다음 조건을 만족하면 됩니다. 4자리 수 x에 대해서 자리를 옮겼을 때 더 작지 않을 것 자리를 옮겼을 때 1000보다 작아..
문제 개요 주어지는 입력값에 대해 상태를 변경한 후 최종 결과물을 출력하는 문제입니다. 문제 접근 스위치 개수가 100개고 학생수가 100명인데 제한시간이 2초 이므로 100명이 모두 100번 바꾼다고 해도 충분히 문제 해결이 가능합니다. 단순 구현으로 생각하고 접근하였습니다. 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Main { static int N; static Boolean[] status; static int students; static int[][] operations; private static..
문제 개요 한칸씩만 이동할 수 있는 좌석과 고정된 좌석이 존재할 때 가능한 모든 조합 수를 구하는 문제입니다. 문제 접근 방법의 가짓수가 최대 20억개이니 브루트 포스로는 해결할 수 없는 문제입니다. 또한 정수에 최대값이 존재하는 언어의 경우에는 이를 고려하여 타입을 설정해야 합니다. (Java의 경우에는 int) 보통 최대값이 매우 큰 문제는 수학적인 내용이 포함되어 있는 경우가 많기 때문에, 수학적으로 접근해보았습니다. VIP에 의해 분리되는 부분들은 각각 가능한 조합을 가질 수 있습니다. 예를 들어 예제로 주어진 123456789에서 4와 7이 VIP라면 다음과 같이 3개의 부분들로 나누어질 수 있습니다. (123) 4 (56) 7 (89) 각 부분들은 독립적이기 때문에 부분들마다 가능한 조합 수들..
문제 개요 N+2개의 노드를 가지는 가중치 그래프가 있을 때, 처음 번호의 노드부터 마지막 번호의 노드까지 도달 가능한지를 확인해야 합니다. 문제 접근 어떤 노드에서 특정 노드까지 도달할 수 있는지 확인하는 방법은 DFS 혹은 BFS를 이용하면 구할 수 있습니다. 따라서 N+2개의 노드들에 대한 거리를 구하고 이를 가중치로 가지는 그래프를 만들어 DFS를 통해 정답을 구할 수 있었습니다. public class Main { static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); static int t; static int[] n = new int[55]; static int[][][] positions = new i..